Where who wants to meet someone

백준 Swift [1620] 나는야 포켓몬 마스터 이다솜 본문

백준 알고리즘 문제 기록/집합과 맵

백준 Swift [1620] 나는야 포켓몬 마스터 이다솜

Lust3r 2023. 8. 11. 15:56
728x90

난이도

실버 IV

 

문제

https://www.acmicpc.net/problem/1620

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

 

내 답안

let input = readLine()!.split(separator: " ").map { Int($0)! }

let n = input[0]
let m = input[1]

var pocketMonDic = [String : Int]()
var pocketMonIntDic = [Int : String]()

for number in 0..<n {
    let text = readLine()!

    pocketMonDic[text] = number + 1
    pocketMonIntDic[number + 1] = text
}

for _ in 1...m {
    let question = readLine()!
    pocketMonDic[question] == nil ? print(pocketMonIntDic[Int(question)!]!) : print(pocketMonDic[question]!)
}

- 처음에는 pocketMonIntDic이 없는 상태로 문제를 풀었음
(String : Int 쌍으로 딕셔너리에 저장하고, 입력 받은 값이 nil이면(String이 아니면) 딕셔너리의 filter를 통해 입력 받은 값을 value로 갖고 있는 key값을 출력하고, 입력 받은 값이 nil이 아니면 해당 값을 출력하도록)

- 하지만 딕셔너리에 값을 넣는 부분, 출력하는 부분 다 조금씩 방법을 달리해도 시간초과가 발생

- 입력받은 값이 숫자일 때, filter & key & joined or first 로 결과를 출력하는 부분이 시간 소요가 많이 되는 것 같아 숫자 값일 때 출력을 빠르게 할 수 있도록 별도의 딕셔너리를 만들어 테스트한 결과 통과할 수 있었음