๐ช [๋ฆฌ๋ชจ์ปจ]
1107๋ฒ: ๋ฆฌ๋ชจ์ปจ
์ฒซ์งธ ์ค์ ์๋น์ด๊ฐ ์ด๋ํ๋ ค๊ณ ํ๋ ์ฑ๋ N (0 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ์ ๊ฐ์ M (0 ≤ M ≤ 10)์ด ์ฃผ์ด์ง๋ค. ๊ณ ์ฅ๋ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ
www.acmicpc.net
๐ ๋ฌธ์ ์ค๋ช
- ์๋น์ด๋ TV๋ฅผ ๋ณด๊ณ ์๋ค. ์๋น์ด๋ ์ฑ๋์ ๋๋ฆฌ๋ ค๊ณ ํ์ง๋ง, ๋ฒํผ์ ๋๋ฌด ์ธ๊ฒ ๋๋ฌ ์ผ๋ถ ์ซ์ ๋ฒํผ์ด ๊ณ ์ฅ๋ฌ๋ค.
- ๋ฆฌ๋ชจ์ปจ์๋ ๋ฒํผ์ด 0๋ถํฐ 9๊น์ง ์ซ์, +์ -๊ฐ ์๋ค. +๋ฅผ ๋๋ฅด๋ฉด ํ์ฌ ๋ณด๊ณ ์๋ ์ฑ๋์์ +1๋ ์ฑ๋๋ก ์ด๋ํ๊ณ , -๋ฅผ ๋๋ฅด๋ฉด -1๋ ์ฑ๋๋ก ์ด๋ํ๋ค. ์ฑ๋ 0์์ -๋ฅผ ๋๋ฅธ ๊ฒฝ์ฐ์๋ ์ฑ๋์ด ๋ณํ์ง ์๊ณ , ์ฑ๋์ ๋ฌดํ๋ ๋งํผ ์๋ค.
- ์๋น์ด๊ฐ ์ง๊ธ ์ด๋ํ๋ ค๊ณ ํ๋ ์ฑ๋์ N์ด๋ค. ์ด๋ค ๋ฒํผ์ด ๊ณ ์ฅ๋ฌ๋์ง ์ฃผ์ด์ก์ ๋, ์ฑ๋ N์ผ๋ก ์ด๋ํ๊ธฐ ์ํด์ ๋ฒํผ์ ์ต์ ๋ช ๋ฒ ๋๋ฌ์ผํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
- ์๋น์ด๊ฐ ์ง๊ธ ๋ณด๊ณ ์๋ ์ฑ๋์ 100๋ฒ์ด๋ค.
๐๐จ ์ ์ถ๋ ฅ ๋ฐ์ดํฐ
[์ ๋ ฅ]
์ฒซ์งธ ์ค์ ์๋น์ด๊ฐ ์ด๋ํ๋ ค๊ณ ํ๋ ์ฑ๋ N (0 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ์ ๊ฐ์ M (0 ≤ M ≤ 10)์ด ์ฃผ์ด์ง๋ค.
๊ณ ์ฅ๋ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ์ด ์ฃผ์ด์ง๋ฉฐ, ๊ฐ์ ๋ฒํผ์ด ์ฌ๋ฌ ๋ฒ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค.
5457
3
6 7 8
[์ถ๋ ฅ]
์ฒซ์งธ ์ค์ ์ฑ๋ N์ผ๋ก ์ด๋ํ๊ธฐ ์ํด ๋ฒํผ์ ์ต์ ๋ช ๋ฒ ๋๋ฌ์ผ ํ๋์ง๋ฅผ ์ถ๋ ฅํ๋ค.
6
๐ ๋ฌธ์ ํ์ด

๋ฆฌ๋ชจ์ปจ์ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ ๋ คํ๋ '๋ธ๋ฃจํธํฌ์ค' ๋ฌธ์ ์ด๋ค. ํด๋น ๋ฌธ์ ์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ๋ค ๊ทธ ์ค์์ min์ ๊ตฌํ์ฌ์ผ ํ๋ค. ํด๋น ๊ฒฝ์ฐ์ ์๋ ์๋์ ๊ฐ๋ค.
- ํ์ฌ ์ฑ๋์ธ 100์์ ๋ชฉํ ์ฑ๋์ธ N๊น์ง +,-๋ก ์ด๋ํ ํ์
- ๊ณ ์ฅ ๋์ง ์์ ๋ฒํผ์ผ๋ก ์ด๋ํ ์ ์๋ ๊ทผ์ฒ์ ์๋ก ์ด๋ ํ +,-๋ก ์ด๋ํ ํ์
์์ ์ฌ๊ณ ๋ฅผ ํ์ด๋ธ ๋ฌธ์ ํ์ด ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
[์ค๋ต]
n = int(input())
broke_num = int(input())
broke_names = set() if broke_num == 0 else set(input().split()) # ๊ณ ์ฅ๋ ๋ฒํผ์ด ์์ ๊ฒฝ์ฐ, ์ธ ๋ฒ์งธ ์
๋ ฅ X.
max_click, min_click = abs(n - 100), abs(n - 100)
for i in range(max_click):
upper_new = set(str(n + i))
lower_new = set(str(n - i))
if broke_names - upper_new == broke_names: # ๊ต์งํฉ์ด ์์ ๊ฒฝ์ฐ.
min_click = len(str(n)) + i
min_click = max_click if max_click < min_click else min_click
break
if broke_names - lower_new == broke_names: # ๊ต์งํฉ์ด ์์ ๊ฒฝ์ฐ.
min_click = len(str(n)) + i
min_click = max_click if max_click < min_click else min_click
break
print(min_click)
ํด๋น ํ์ด์ ๊ฒฝ์ฐ, ๋ฐฑ์ค ์ฌ์ดํธ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ ์๋ค์ ๋ชจ๋ ๋ง์กฑํ๋ ์ฝ๋ ์ ์ถ์ ๋ถํฉ๊ฒฉ ์ฒ๋ฆฌ๊ฐ ๋์๋ค.
์ค๋ ์๊ฐ ์ฐพ์ ๊ฒฐ๊ณผ, ๋ ๊ฐ์ง ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ ์ ์์๋ค.
์ฒซ๋ฒ ์งธ ๋ฌธ์ ์ฝ๋๋ก๋ for๋ฌธ ๋ด๋ถ์ ์กฐ๊ฑด๋ฌธ ๋ด์์ min_click = len(str(n)) + i๋ผ๊ณ ์ ์ธํ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌ ํ ์ ์์๋๋ฐ ์ด ๊ฒฝ์ฐ๋ ์์ ๊ฒฝ์ฐ 2๋ฒ์ผ๋ก ๋ชฉํ ์ซ์์ธ N์ด ์๋ N๊ณผ ๊ทผ์ ํ ์๋ก ๊ฐ ํ +,-๋ฅผ ํตํด ์ด๋ํ๋ ๊ฒฝ์ฐ์ด๊ธฐ์ min_click = len(str(n+i)) + i ๋๋ min_click = len(str(n-i)) + i ๊ฐ ์ณ๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์์ ํด์ผ ํ๋ค.
๋๋ฒ ์งธ ๋ฌธ์ ์ฝ๋๋ก๋ N๊ณผ ๊ทผ์ ํ ์๋ฅผ ์ฐพ์๋ if๋ฌธ์ ๋์ดํ์ฌ ๋จ์ํ upper์ ์ฐพ๊ณ lower์ ์ฐพ๋ ๊ตฌ์กฐ๋ก ์ง ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ ์ ์์๋๋ฐ, ์ด๋ upper๊ณผ lower์ด ๋์์ ์ฐพ์์ง ๊ฒฝ์ฐ lower์ด ๋ ํจ์จ์ ์ด๋ผ๋ upper์ ํด๋นํ๋ ๋ต์ด ์ถ๋ ฅ๋๋ค๋ ๋ฌธ์ ๊ฐ ์์๋ค.
1555
8
0 1 3 4 5 6 7 9
670
์ฆ, ์์ ๊ฐ์ ์ ๋ ฅ๊ฐ์ ๋ฃ์์ ๋ ์ต์ ์ ๊ทผ์ ์๋ 888์ด๋ 2222๋ฅผ ์ฐพ๋๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด ๋ ๊ฐ์ง ๋ฌธ์ ์ ์ ๋ณด์ํ์ฌ ์ฐพ์ ์ ๋ต ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
[์์ ๋ ์ ๋ต]
n = int(input())
broke_num = int(input())
broke_names = set() if broke_num == 0 else set(input().split())
default_click, min_click = abs(n - 100), abs(n - 100)
def check_broke_exists(error_keys, goal, delta) -> int:
check_set = set(str(goal + delta))
if check_set - error_keys == check_set:
return len(str(goal + delta)) + abs(delta)
else:
return -1
for i in range(default_click):
upper_new = check_broke_exists(broke_names, n, +i)
lower_new = check_broke_exists(broke_names, n, -i)
if upper_new >= 0 and lower_new >= 0:
min_click = min(upper_new, lower_new, default_click)
break
elif upper_new >= 0:
min_click = min(upper_new, default_click)
break
elif lower_new >= 0:
min_click = min(lower_new, default_click)
break
else:
continue
print(min_click)
lower๊ณผ upper์ ์ฐพ๋ ์ฝ๋๋ ํจ์๋ก ๋ชจ๋ํํ์ฌ ๋ฏธ๋ฆฌ ์ฐพ์ ํ, ์ด๋ฅผ ์กฐ๊ฑด๋ฌธ์ ํตํด ๊ฒฝ์ฐ์ ์๋ฅผ ์ฒ๋ฆฌ ํ์ฌ ์ฃผ์๋ค.
→ ๊ทธ๋ฐ๋ฐ ์ฌ์ค lower๊ฐ ๋ฌด์กฐ๊ฑด upper๋ณด๋ค ๋ฒํผ ํด๋ฆญ์ ํ์๊ฐ ์ ์ผ๋ ๊ทธ๋ฅ ์กฐ๊ฑด๋ฌธ ์์๋ง ๋ฐ๊ฟ์ค๋ ๋์ ๋..ใ ..
๐ ํ์ด/๊ฐ๋ ์ ๋ฆฌ
- ์งํฉ(set)
: ๊ต์งํฉ(&), ์ฐจ์งํฉ(-), ๊ณต์งํฉ(set()) ๋ฑ - ์ ์ฌ ์ผํญ ์ฐ์ฐ์
: true๊ฐ if ture์กฐ๊ฑด else false๊ฐ
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐฑ์ค] 6064. ์นด์ ๋ฌ๋ ฅ (0) | 2022.03.05 |
|---|---|
| [๋ฐฑ์ค] 14500. ํ ํธ๋ก๋ฏธ๋ ธ (์์ฑ ไธญ) (0) | 2022.03.02 |
| [๋ฐฑ์ค] 1476. ๋ ์ง ๊ณ์ฐ (0) | 2022.03.01 |
| [๋ฐฑ์ค] 3085. ์ฌํ ๊ฒ์ (0) | 2022.02.23 |
| [๋ฐฑ์ค] 2309. ์ผ๊ณฑ ๋์์ด (0) | 2022.02.22 |