어려웠다 .....
다른 사람 풀이 무진장 많이 봤다...😇
고장나지 않은 버튼을 사용해서 누를 수 있는 채널 중
이동하려는 채널과 가장 가까운 채널을 찾아 이동하는 횟수를 구해주어야한다.
예를 들어 이동하려는 채널이 5457이고 고장난 버튼이 [6,7,8] 이라면
따라서, 이동하는 최솟값은 두 가지 경우 중 최솟값이고 이 경우는 6이다.
import Foundation
let channel = Int(readLine()!)!
let NumOfWrongButton = Int(readLine()!)!
var wrongButtons = [Int]()
if NumOfWrongButton != 0 {
wrongButtons = readLine()!.split(separator: " ").map { Int(String($0))! }
getNum()
} else {
let a = String(channel).count
let b = abs(100 - channel)
a < b ? print(a) : print(b)
}
func getNum() {
var buttons = Array(repeating: false, count: 10)
for i in wrongButtons {
buttons[i] = true
}
var max = -1
var min = -1
for i in (0...channel).reversed() {
var mode = true
var N = i
while N >= 0 {
if buttons[N % 10] {
mode = false
break
} else {
N = N / 10
}
if N == 0 {
break
}
}
if mode {
max = N
break
}
}
for i in channel...1000000 {
var mode = true
var N = i
while N >= 0 {
if buttons[N % 10] {
mode = false
break
} else {
N = N / 10
}
if N == 0 {
break
}
}
if mode {
min = i
break
}
}
if max == -1 {
max = 1000000
} else {
max = channel - max + String(max).count
}
if min == -1 {
min = 1000000
} else {
min = abs(channel - min) + String(min).count
}
let mid = abs(100-channel)
print([max,min,mid].min()!)
}
통과한 뒤에
진짜진짜 멋있는 다른 분의 풀이를 봐서 참고하여 수정한 풀이입니당
제 지분은,한 2프로...