반응형
문제가 엄청 엄청 긴데, 마지막 오박사 말만 읽으면 된다.
1. 이름을 보고 번호를 말하기 위해 Dictionary<String,Int>를 둔다.
2. 번호를 보고 이름을 말하기 위해 Dictionary<Int,String> 또는 Array<String>을 둔다.
1. 이름을 보고 번호를 말하기 위해 Dictionary<String, Int>를 둔다.
N이 100,000이므로, 각 쿼리를 완전탐색으로 O(N)에 수행해서는 시간 안에 통과할 수 없다. Key가 포켓몬 이름이고 Value가 번호인 딕셔너리를 두어 O(1)에 각 쿼리를 완료해야 한다.
2. 번호를 보고 이름을 말하기 위해 Dictionary<Int, String> 또는 Array를 둔다.
1번이랑 같은데, Key, Value 타입만 반대로 하면 된다. Key가 Int인 경우에는 배열을 subscript로 접근하는 거랑 똑같기 때문에 배열로도 가능하다. 딕셔너리로 시간 초과를 한번 경험해봤기 때문에 가능하다면 배열로 짜는 습관을 가지게 돼서 이 문제도 배열로 풀었다.
import Foundation
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let N = input[0]
let M = input[1]
var numToString = Array(repeating: "", count: 100001)
var stringToNum: Dictionary<String, Int> = [:]
for i in 1...N {
let pokemon = readLine()!
numToString[i] = pokemon
stringToNum[pokemon] = i
}
var result = ""
for _ in 1...M {
let query = readLine()!
let num = Int(query) ?? 0
if num == 0 {
result.write("\(stringToNum[query]!)\n")
} else {
result.write("\(numToString[num])\n")
}
}
print(result)
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 2630번 색종이 만들기 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.16 |
---|---|
백준 1764번 듣보잡 - 스위프트(Swift) 풀이 (0) | 2022.01.16 |
백준 12851번 숨바꼭질 2 - 스위프트(Swift) 풀이 (0) | 2022.01.15 |
백준 1697번 숨바꼭질 - 스위프트(Swift) 풀이 (0) | 2022.01.15 |
백준 7662번 이중 우선순위 큐 - C++(cpp) 풀이 (0) | 2022.01.14 |
댓글