Swift/Swift Codingtest

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

hyunjuntyler 2023. 4. 4. 23:41

문제 링크

 

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

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

www.acmicpc.net

문제 풀이

나의 풀이


  
import Foundation
let NM = readLine()!.split(separator: " " ).map{Int(String($0))!}
var array1 = [String : Int]()
var array2 = [Int : String]()
for i in 1...NM[0] {
let p = readLine()!
array1[p] = i
array2[i] = p
}
for _ in 1...NM[1] {
let find = readLine()!
if let poketmon = Int(find) {
print(array2[poketmon]!)
} else {
print(array1[find]!)
}
}

풀이 과정


  
// 시간초과 코드
import Foundation
let NM = readLine()!.split(separator: " " ).map{Int(String($0))!}
var array : [String] = []
for _ in 1...NM[0] {
let p = readLine()!
array.append(p)
}
for _ in 1...NM[1] {
let find = readLine()!
if Int(find) != nil {
print(array[Int(find)!-1])
} else {
print((array.firstIndex(of: find))!+1)
}
}

Swift... 시간초과가 많이 나는 것 같다. 특히 배열을 사용할 때 append, firstIndex를 써서 그런가 시간초과가 났다. 그래서 배열을 최대한 빼줬다.


  
import Foundation
let NM = readLine()!.split(separator: " " ).map{Int(String($0))!}
var array1 = [String : Int]()
var array2 = [Int : String]()
for i in 1...NM[0] {
let p = readLine()!
array1[p] = i
array2[i] = p
}
for _ in 1...NM[1] {
let find = readLine()!
if let poketmon = Int(find) {
print(array2[poketmon]!)
} else {
print(array1[find]!)
}
}
// 아래 코드도 가능하다!
// for _ in 1...NM[1] {
// let find = readLine()!
//
// if Int(find) != nil {
// print(array2[Int(find)!]!)
// } else {
// print(array1[find]!)
// }
// }

딕셔너리를 사용했다. if let도 이용해 보았다. poketmon이 정의되면 array2에서 가져오고, nil값이 되면 array1에서 가져온다!

 

!를 붙여서 Optional을 강제로 벗겨줬는데 이 방법이 좋은 것인지 모르겠다. 좀 더 공부가 필요하다.

'Swift > Swift Codingtest' 카테고리의 다른 글

[Swift] 백준 5618 공약수  (0) 2023.04.06
[Swift] 백준 14425번 문자열 집합  (0) 2023.04.05
[Swift] 백준풀이를 위한 Queue  (0) 2023.04.05
[Swift] 백준 2164 카드2  (0) 2023.03.27
[Swift] 백준 1158 요세푸스 문제  (0) 2023.03.25