728x90
최근 들어 푼 문제중 가장 오래걸린 문제였던 것 같다.
논리적인 흐름은 딱히 틀린 것이 없었는데 논리를 수식으로 풀어내는 과정이 너무 복잡해버려져서 계속 오류가 발생했다.
당시 오류가 발생했을 때 논리적 흐름은
1. 문자열을 입력받고
2. 입력받은 문자열을 a...z 까지 for문을 돌려서 검사를 한다.
3. a가 처음 찾아지는 array.first()와 array.last()의 Index 차이가 2 이상 나는 경우 이는 붙어있지 않은 케이스이므로
4. 단어가 아니다 -> count += 0
위와 같은 논리의 흐름으로 진행했는데 아무래도 모든 단어들을 a...z까지 검사하는 과정이 너무 복잡해져 중간에 오류를 범한 것 같다 ㅠㅠ
따라서 아래와 같이 간소화했다.
이 문제를 풀면서 생각한 논리적 흐름은
- 입력 받은 문자열을 배열에 추가한다.
- 다른 문자열이 추가될때 기존에 추가된 인자일 경우
- 바로 직전에(last) 추가된 인자와 같은지 아닌지 비교한다.
- 직전에 추가된 인자와 같지 않다면 "aba"와 같이 최소 한 칸 이상 떨어져있는 경우이다.
- 그런 경우 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)
- 없음
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 2292번 Swift 알고리즘 연습 (0) | 2022.08.22 |
---|---|
백준 1712번 Swift 알고리즘 연습 (0) | 2022.08.22 |
백준 2941번 Swift 알고리즘 연습 (0) | 2022.08.22 |
백준 5622번 Swift 알고리즘 연습 (0) | 2022.08.22 |
백준 2908번 Swift 알고리즘 연습 (0) | 2022.08.22 |