ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
1107๋ฒ: ๋ฆฌ๋ชจ์ปจ
์ฒซ์งธ ์ค์ ์๋น์ด๊ฐ ์ด๋ํ๋ ค๊ณ ํ๋ ์ฑ๋ N (0 โค N โค 500,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ์ ๊ฐ์ M (0 โค M โค 10)์ด ์ฃผ์ด์ง๋ค. ๊ณ ์ฅ๋ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ
www.acmicpc.net
๋ฌธ์ ํ์ด
์ฑ๋ N์ผ๋ก ์ด๋ํ๊ณ ์ ํ ๋, M๊ฐ์ ๋ฒํผ์ด ๊ณ ์ฅ ๋์ ๊ณ ์ฅ ๋ ๋ฒํผ์ ์ ์ธํ๊ณ +, -๋ฅผ ํ์ฉํ์ฌ ์ํ๋ ์ฑ๋์ ์ ๊ทผํ๊ธฐ ์ํด ์ต์๋ก ๋ฆฌ๋ชจ์ปจ ๋ฒํผ์ ๋๋ฅด๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. DFS๋ฅผ ํตํด ํ์์ ์งํํ๋๋ผ๋, python3์ recursive depth๋ฅผ ์ด๊ณผํ์ง ์์ผ๋ฏ๋ก DFS๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค.
- ๊ณ ์ฅ ๋๊ณ ์ฅ ๋ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ
- ์ฑ๋ 100๋ฒ๋ถํฐ ์์ํ๋ฏ๋ก abs(100 - ์ด๋ํ๊ณ ์ ํ๋ ์ฑ๋)๊ณผ ํด๋น ์ฑ๋์ ์๋ฅผ ๋ฒํผ์ผ๋ก ์ ๋ ฅํ์์ ๋์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํด ์์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
- ๊ณ ์ฅ ๋ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒํผ์ DFS๋ก ํตํด ํ๋์ฉ ์ถ๊ฐํด๊ฐ๋ฉฐ, depth๋ N์ ๊ธธ์ด๋งํผ ํ์ํ๋ค.
- ๋ง์ฝ ์ฐพ๊ณ ์ ํ๋ ์ฑ๋์ด 1234๋ผ๋ฉด, ์ซ์ ๋ฒํผ์ ์ ๋ ฅํ ๊ฒฝ์ฐ 4์๋ฆฌ ์ด์ ์ ํํ ํ์๋ ์๋ค.
- abs(N - ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒํผ์ ํตํด ์ ๋ ฅํ ์ฑ๋)์ +, -๋ฅผ ๋๋ฌ์ผ ํ๋ ํ์๊ฐ ๋๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒํผ์ DFS๋ก ํตํด ํ๋์ฉ ์ถ๊ฐํด๊ฐ๋ฉฐ, depth๋ N์ ๊ธธ์ด๋งํผ ํ์ํ๋ค.
์ฝ๋
from sys import stdin
def dfs(channel, press_cnt):
global answer
for button in available:
cur_channel = int(channel + button)
remainder = abs(n - cur_channel)
answer = min(answer, press_cnt + remainder + 1)
if press_cnt < channel_length:
dfs(str(cur_channel), press_cnt + 1)
if __name__ == '__main__':
n = int(stdin.readline())
channel_length = len(str(n))
m = int(stdin.readline())
answer = abs(100 - n)
if not m:
print(min(answer, channel_length))
exit(0)
available = {str(num) for num in range(10)} - set(stdin.readline().split())
dfs('', 0)
print(answer)์ฑ์ ์ค, 92%์ 97%์์ ํ๋ ธ๋ค๊ณ ํ์๋ค. M์ด 0์ธ ๊ฒฝ์ฐ, ์ฆ ๊ณ ์ฅ๋ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ ๊ฐ๊ณ ์ ํ๋ ์ฑ๋์ ํฌ๊ธฐ (N์ด 1234์ธ ๊ฒฝ์ฐ : 4) ๋งํผ ๋ฐ์ํ์๋๋ค. ์๊ฐํด๋ณด๋, ๋จ์ํ +, -๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ์ต์์ผ ์ ์๋ค๋ ๊ฒ์ ๋ฐ์ํ์ง ์์ ๋ฐ๋ก๋ฅผ ์ถ๊ฐํ์ง ์์์ ํ๋ ธ์๋ค.๐
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค: 12886 ๋ ๊ทธ๋ฃน (0) | 2020.08.21 |
|---|---|
| ๋ฐฑ์ค: 1339 ๋จ์ด ์ํ (0) | 2020.08.20 |
| ๋ฐฑ์ค: 1062 ๊ฐ๋ฅด์นจ (0) | 2020.08.18 |
| ๋ฐฑ์ค: 7453 ํฉ์ด 0์ธ ๋ค ์ ์ (0) | 2020.08.17 |
| ๋ฐฑ์ค: 2143 ๋ ๋ฐฐ์ด์ ํฉ (0) | 2020.08.17 |