๐ ๋ฌธ์
https://www.acmicpc.net/problem/1107
๐ ๋์ ํ์ด
๋จผ์ ๋ฌธ์ ๊ฐ,,, ์ผ๋จ ๊ณจ๋๋ผ๋ ๊ฒ์ ๋์ปฅ ๊ฒ์ด ๋ฌ์ง๋ง,, ์์ ์ ํ๋ฒ ํ์ด๋ดค๋ ๋ฌธ์ ์ด๊ธฐ์ ์กฐ๊ธ์ฉ ๊ธฐ์ต์ด ๋ฌ๋ค. ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๋ฉด์ ์ด๊ฑฐ ๋ฐฑํ๋ก ๋ค์์ ๊ธฐ์ต๋ชปํจ ใ ใ ใ ์ด๋ฌ๊ณ ํ์ง๋ง, ์๊ทผํ ๊ธฐ์ต์ด ๋๋ค!
์ฐ์ , ์์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ธ๊ฐ์ง์ ๋ฐฉ๋ฒ์ผ๋ก ์ฑ๋์ ์ด๋ํ ์ ์๋ค.
1. +, - ๋ฒํผ์ผ๋ก๋ง ์๋ฒฝํ๊ฒ ์ด๋
2. ์ซ์๋ฒํผ์ด ๊ณ ์ฅ๋์ง ์์์, ์ซ์๋ฒํผ์ผ๋ก๋ง ์ด๋
3. ์ซ์๋ฒํผ์ด ๊ณ ์ฅ๋ ๊ฒ์ด ์๊ฒจ์ ๊ฐ๊น์ด ์ด๋๋ก ๊ฐ ์ด๋ ํด์ +์ -๋ก ์ถ๊ฐ์ด๋
์ด๋ ๊ฒ ์ธ๊ฐ์ง ๊ฒฝ์ฐ๋ก ์๊ฐํ ์ ์๋ค.
๋ฌธ์ ์์กฐ๊ฑด์ ๋ณด๋ฉด, ์ด๋ํ๋ ค๊ณ ํ๋ ์ฑ๋N์ 500000์ ๊ฐ๊ฑฐ๋ ์์์๋ก ์ ์๋์ง๋ง, ์ด๋ํ ์ ์๋ ์ฑ๋์ ๋ฌดํ๋๋ค. ์ฌ๊ธฐ์ ๋จ์ํ๊ฒ 500000๊น์ง ๋ฒ์๋ฅผ ์ก์ผ๋ฉด ๋๊ฒ ์ง ํ๋ค๊ฐ ํฐ์ฝ๋ค์น ์ฌ๋์ด ๋ฐ๋ก ๋๋ค!! ๐
์ฑ๋์ด ๋ฌดํ๋๋ก ์๋ค๊ณ ์ธ๊ธํด์ค ์ด์ ๋ ๋ฌด์์ผ๊น? ์ด๋ํ ์ ์๋ ๋ฒ์๊ฐ, ์กฐ๊ฑด์์ ์ฃผ์ด์ง 500000๋ณด๋ค ๋์ด๊ฐ ์ ๋ ์๋ค๋ ๋ป์ด๋ค.
์์๋ก ์ดํด๋ณด์.
์ฑ๋ 500000์ผ๋ก ์ด๋ํ๋ค๊ณ ํ ๋,
1์์ 500000์ผ๋ก ์ด๋ํ๋ ๊ฒ๋ณด๋ค, 999000์์ 500000์ผ๋ก ์ด๋ํ๋ ๊ฒ์ด ๋ ์ ์ ๋ฒํผ์ ๋๋ฅด๊ณ ์ด๋ํ ์ ์๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์ฒ๋ผ, ํ์ฌ ์๋ณด๋ค ํฐ ์๋ฅผ ๋๋ฌ์ ์ฑ๋์ ์ด๋ํ์๋ ๋ ํจ์จ์ ์ผ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ๋ฒ์๋ฅผ ์ต์ 1000000๊น์ง ๋ด์ผํ๋ค. (์ฐ๋ฆฌ๊ฐ ๋๋ฆด ์ ์๋ ์ฑ๋์ 50๋ง ์ด๋ฏ๋ก!)
๋ค์ ๊ทธ๋ผ ๋์์์, ์์์ ์ ์ 3๊ฐ์ง ๋ฐฉ์์ for๋ฌธ์ ์ด์ฉํด์ ์์ ํ์์ผ๋ก ํ์ด๋ณด์
๐ ์ ๋ต์ฝ๋
- solution() : ๋ฉ์ธํจ์
- pressCloseNumber() : ์ซ์๋ฒํผ์ ๋๋ฅด๋ ํ์๋ฅผ ์ธ์ด์ฃผ๋ ํจ์
- for๋ฌธ์ ๋๋ฆฐ ์ด์ : 0๋ฒ๋ถํฐ 1000000๊น์ง ์ ๋ถ ๋๋ฌ๋ณด๋ ๊ฒ. ์ด๋ํด์ผํ๋ ์๊ฐ 100์ด์ด๋, 1000์ด์ด๋, 1000000์ด์ด๋ ๋ชจ๋ ์๋ฅผ ํ์ํ ํ, ๊ฐ์ฅ ์ต์๋ก ๋๋ ค์ง ๋ฒํผ ํ์๋ฅผ ์ถ๋ ฅํ ์ ์๋๋ก ํ๋ค.
- ์ฒ์ minCnt์ +์-๋ก๋ง ์ด๋๊ฐ๋ฅํ ํ์๋ฅผ ๋ฃ์ด์ค๋ค. abs(์ด๋ํ๋ ค๋์ฑ๋n - ์์์ฑ๋100)
- for ๋ฌธ์ ์ด์ฉํด์ ์ต์๊ฐ์ ์ฐพ์์ค๋ค.
- ์ต์๊ฐ(+์ -๋ง ๋๋ฌ์ ๋๋ ธ์๋ vs. ์ฑ๋1๋ก ๋๋ฆฌ๊ณ +-๋ก ์กฐ์ ํ ํ์)
- ์์์ ๋์ถ๋ ์ต์๊ฐ vs. ์ฑ๋2๋ก ๋๋ฆฌ๊ณ +-๋ก ์กฐ์ ํ ํ์
- ์์์ ๋์ถ๋ ์ต์๊ฐ vs. ์ฑ๋3์ผ๋ก ๋๋ฆฌ๊ณ +-๋ก ์กฐ์ ํ ํ์
- .....
- 100๋ง๊น์ง ์งํ
import Foundation
private func solution() {
let n = Int(readLine()!)!
let m = Int(readLine()!)!
var brokenBtn = [Int]()
if m != 0 {
brokenBtn = readLine()!.split(separator: " ").map { Int($0)! }
}
// +-๋ก๋ง ์ด๋ํ๋ ํ์
var minCnt = abs(n - 100)
// ์ซ์๋ฒํผ์ ๋๋ฌ์ ์ด๋ํ๋ ๊ฒฝ์ฐ ์ ๋ถ ํ
์คํธ
// ์ซ์๋ฒํผ์ผ๋ก i๋ฅผ ๋๋ ์ ๋๋, +-๋ก๋ง ์ด๋ํ ๋๋ ๋น๊ตํด์ฃผ๋ ๋ถ๋ถ
for i in 0...1000000 {
let pressNumButton = pressCloseNumber(n: i, brokenBtn: brokenBtn)
if pressNumButton > 0 {
let pressNumAndPlusMinus = abs(n - i) // ์ฑ๋ i๋ก ์ด๋ํ์ผ๋๊น, ๊ฑฐ๊ธฐ์ +-๋๋ฌ์ฃผ๋ ํ์
minCnt = min(minCnt, pressNumAndPlusMinus + pressNumButton)
}
}
print(minCnt)
}
private func pressCloseNumber(n: Int, brokenBtn: [Int]) -> Int {
var n = n
if n == 0 {
if brokenBtn.contains(n) {
return 0
} else {
return 1
}
}
var buttonPressCnt = 0
while n > 0 {
if brokenBtn.contains(n % 10) {
return 0
}
n /= 10
buttonPressCnt += 1
}
return buttonPressCnt
}
solution()
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 6064๋ฒ - ์นด์๋ฌ๋ ฅ (์์ธํ ์ค๋ช ) (0) | 2023.01.01 |
---|---|
[๋ฐฑ์ค] (Swift) 14500๋ฒ - ํ ํธ๋ก๋ฏธ๋ ธ (์์ ํ์ / DFS๋ก๋ ํ ์ ์๋ค๋๋ฐ?) (0) | 2022.12.30 |
[๋ฐฑ์ค] (Swift) 1476๋ฒ - ๋ ์ง๊ณ์ฐ (0) | 2022.12.29 |
[๋ฐฑ์ค] (Swift) 3085๋ฒ - ์ฌํ๊ฒ์ (๋๋ฒ์งธ ํ์ด) (0) | 2022.12.28 |
[๋ฐฑ์ค] (Swift) 2309๋ฒ - ์ผ๊ณฑ๋์์ด (1) | 2022.12.28 |