(Swift) 백준 1316 그룹 단어 체커

SteadySlower·2022년 5월 14일
0

Coding Test

목록 보기
28/305

1316번: 그룹 단어 체커

func isGroupWord(word: String) -> Int {
    var check = [Character]()
    var before = Character("*")
    for char in word {
        if char == before {
            continue
        } else if check.contains(char) {
            return 0
        } else {
            check.append(char)
            before = char
        }
    }
    return 1
}

let N = Int(readLine()!)!
var result = 0

for _ in 0..<N {
    result += isGroupWord(word: readLine()!)
}

print(result)

파이썬에서는 GroupBy라는 너무 편한 기능이 있었는데 스위프트에는 그런 기능이 없더라구요... 그래서 문자열을 순회하면서 하나하나 따져보는 방법을 사용합니다.

  1. 먼저 check라는 배열에 지금까지 나온 문자열을 저장하고 before라는 변수에는 바로 이전의 char를 저장합니다.
  2. word의 Character를 순회하면서
    1. char와 before가 동일한 경우 = 같은 문자가 연속됨 = 그룹 단어의 조건을 만족하므로 continue
    2. 이미 check에 있는 문자인 경우 = 이전에 나온 문자가 다시 나옴 = 그룹 단어의 조건을 만족하지 않으므로 0을 리턴
    3. char가 before와 동일하지도 않고 check에 있는 문자도 아닌 경우 = 이전에 없었던 새로운 문자가 나온 경우 char를 check에 저장하고 before를 char로 바꾸어줍니다.
  3. 위 반복문을 통과한 경우 그룹 단어이므로 1을 리턴합니다.
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글