TIL/알고리즘 공부

백준 1316번 Swift 알고리즘 연습

여의도사노비 2022. 8. 22. 20:52
728x90

최근 들어 푼 문제중 가장 오래걸린 문제였던 것 같다.

논리적인 흐름은 딱히 틀린 것이 없었는데 논리를 수식으로 풀어내는 과정이 너무 복잡해버려져서 계속 오류가 발생했다.

 

당시 오류가 발생했을 때 논리적 흐름은

1. 문자열을 입력받고

2. 입력받은 문자열을 a...z 까지 for문을 돌려서 검사를 한다.

3. a가 처음 찾아지는 array.first()와 array.last()의 Index 차이가 2 이상 나는 경우 이는 붙어있지 않은 케이스이므로

4. 단어가 아니다 -> count += 0

 

위와 같은 논리의 흐름으로 진행했는데 아무래도 모든 단어들을 a...z까지 검사하는 과정이 너무 복잡해져 중간에 오류를 범한 것 같다 ㅠㅠ

따라서 아래와 같이 간소화했다.

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. 입력 받은 문자열을 배열에 추가한다.
  2. 다른 문자열이 추가될때 기존에 추가된 인자일 경우
  3. 바로 직전에(last) 추가된 인자와 같은지 아닌지 비교한다.
  4. 직전에 추가된 인자와 같지 않다면 "aba"와 같이 최소 한 칸 이상 떨어져있는 경우이다.
  5. 그런 경우 0, 붙어 있다면 단어로 볼 수 있으므로 count += 1

 

논리를 최대한 간소화 시키는 것이 참 어려운것 같다.

 

 

* 1316번

let iteration = Int(readLine()!)!
var wordsCount = 0

for _ in 0..<iteration {
    let word = readLine()!
    var arr = [Character]()
    var check = false
    
    for i in word {
        if !arr.contains(i) {
            arr.append(i)
        }else {
            if arr.last != i {
                check = true
            }
        }
    }
    if !check {
        wordsCount += 1
    }
}
print(wordsCount)

 

정리(Today I Learned)

  1. 없음