링크: https://www.acmicpc.net/problem/16113
16113번: 시그널
zxcvber는 외계인을 연구하는 과학자다. 그는 지난 10년간 우주에서 오는 시그널를 연구했지만, 아무런 성과가 없었다. 그러던 어느 날, 갑자기 우주에서 이상한 시그널이 오기 시작했다. zxcvber는
www.acmicpc.net
0~9까지의 배열 모습을 numbers 딕셔너리에 저장해놓고 변수 j를 통해 시그널을 돌면서 숫자를 찾습니다.
j부터 j + 3까지는 1을 제외한 0~9까지의 숫자가 있을 수 있습니다. 시그널의 맨 마지막에 1이 있을 수 있으니 j + 3 <= n / 5로 조건을 달았습니다.
import Foundation
let n = Int(readLine()!)!
let s = readLine()!.map { $0 }
var signals = [[Character]]()
let numbers = [0: ["###", "#.#", "#.#", "#.#", "###"], 1: ["#", "#", "#", "#", "#"], 2: ["###", "..#", "###", "#..", "###"], 3: ["###", "..#", "###", "..#", "###"], 4: ["#.#", "#.#", "###", "..#", "..#"], 5: ["###", "#..", "###", "..#", "###"], 6: ["###", "#..", "###", "#.#", "###"], 7: ["###", "..#", "..#", "..#", "..#"], 8: ["###", "#.#", "###", "#.#", "###"], 9: ["###", "#.#", "###", "..#", "###"]]
var j = 0
while j < s.count {
signals.append(s[j..<j + n / 5].map { $0 })
j += n / 5
}
func getArray(start: Int, end: Int) -> [String] {
var result = Array(repeating: "", count: 5)
for i in 0..<5 {
result[i] = String(signals[i][start..<end])
}
return result
}
var result = ""
j = 0
out: while j < n / 5 {
if signals[0][j] == "." { // 공백 건너뛰기
j += 1
continue
}
if j + 3 <= n / 5 {
let array = getArray(start: j, end: j + 3)
for i in 0...9 {
if array == numbers[i] {
result.append(String(i))
j += 4
continue out
}
}
}
let array = getArray(start: j, end: j + 1)
if array == numbers[1] {
result.append("1")
j += 2
}
}
print(result)
'알고리즘' 카테고리의 다른 글
[Swift] 깊이 우선 탐색(DFS)과 간선의 분류 (0) | 2022.07.27 |
---|---|
[Swift] 프로그래머스 - 카카오 표 편집 (0) | 2022.07.18 |
[Swift] 프로그래머스 - 카카오 기둥과 보 설치 (0) | 2022.06.27 |
[Swift] 프로그래머스 - 카카오 괄호 변환 (0) | 2022.06.27 |
[Swift] 백준 1992번 쿼드트리 (0) | 2022.05.11 |
댓글