[백준] 1316번 그룹단어체커

Greenddoovie·2021년 12월 10일
0

백준

목록 보기
1/30

1316번 그룹 단어 체커

접근방법

알파벳을 Key값으로 받는 Map을 만들고 value는 boolean 타입의 사용되었는지 확인하는 값 추가

  1. map[alphabet]값이 false면 아직 나타나지 않은 경우
  2. map[alphabet] == true이고 이전 값이 현재 값과 같으면 연속된 경우
  3. map[alphabet] == true인데 이전 값과 다르면 끊어졌다가 나타난 알파벳

따라서 3번의 경우는 그룹단어로 포함시키지 않으면 됨

import java.io.BufferedReader
import java.io.InputStreamReader


val br = BufferedReader(InputStreamReader(System.`in`))
val n = br.readLine().toInt()

fun main() {
    val strList = mutableListOf<String>()
    for (i in 0 until n) {
        strList.add(br.readLine().trim())
    }
    
    val map = getAlphabetMap()
    var ans = 0    
    strList.forEach { word ->
        var now = "1"
        var flag = false
        word.forEach {
            val str = it.toString()
            if (map[str] == false) {
                map[str] = true
                now = str
            } else if (map[str] == true && now != str) {
                flag = true
                return@forEach
            }
        }
        if (!flag) {
            ans++
        }
        resetAlphabetMap(map)
    }
    println(ans)
}

fun getAlphabetMap(): HashMap<String, Boolean> {
    return hashMapOf<String, Boolean>().also { map ->
        ('a'..'z').forEach { it->
            map[it.toString()] = false
        }
    }
}

fun resetAlphabetMap(map: HashMap<String, Boolean>) = map.keys.forEach { key -> map[key] = false }
profile
기초를 이해하면 세상이 다르게 보인다

0개의 댓글