문제 링크
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 |