https://www.acmicpc.net/problem/1463
๋์ ๋ต
์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ๋งค๊ฒผ์
1๋นผ๊ธฐ < 2๋๋๊ธฐ < 1๋นผ๊ณ 3๋๋๊ธฐ < 3๋๋๊ธฐ
์ฌ๊ธฐ์ 3๋๋๊ธฐ > 1๋นผ๊ณ 2๋๋๊ธฐ ์ด๋ฌํ ๊ฐ์ ์ ์์ ๊ณ์ฐ๋ง์ผ๋ก ํ์ ํ๋์ ๋ฌธ์ ๊ฐ ์์์ง ์๋ ์ถ๋ค.
์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ๋๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์
๋ค๋ฅธ ๋ต
(2020-04-19 ์์ )
๋์ ๊ณํ๋ฒ(Dynamic programming)์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
๋์ ๊ณํ๋ฒ์ ์ด๋ค ๋ฌธ์ ์ ๋ต์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋์๋ค๊ฐ ๋ค์ ๊ฐ์ ๊ตฌํด์ผํ ๋ ์ค๋ณต๊ณ์ฐ์ด ํ์์๊ฒ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ธฐ๋ฒ์ด๋ค.
x = int(input())
count = 0
minimum = [x]
def cal(x): # ์ฃผ์ด์ง ํ๋ ฌ์ ๋ชจ๋ ์ ๊ฐ๊ฐ์ ๋ํด์ -1, 3์ผ๋ก ๋๋๊ธฐ, 2๋ก ๋๋๊ธฐ์ 3๊ฐ์ง ์ฐ์ฐ์ ๋ชจ๋ ์งํ
list = []
for i in x:
list.append(i-1) # 1์ ๋ชจ๋ ์ํฉ์์ ๋บ ์ ์์
if i%3 ==0: # 3์ผ๋ก ๋๋ ์ง๋ ์ํฉ
list.append(i/3)
if i%2 ==0: # 2๋ก ๋๋ ์ง๋ ์ํฉ
list.append(i/2)
return list
while True:
if x == 1: # ์ฒ์ ์
๋ ฅ๋ฐ์ ์๊ฐ 1์ด๋ฉด
print(count)
break
temp = minimum[:] # minimum ํ๋ ฌ์ ์๋ค์ ์ฎ๊ฒจ๋ฐ์
minimum = []
minimum = cal(temp) # ๋ค์ ํ๋ ฌ์ ๋ฐ์
count +=1
if min(minimum) == 1:
print(count)
break
ํ์์ ๋ ๋ง๋ค๊ณ ์๊ฐํ๋๋ฐ, ์๊ฐ์ด ์ง๋๊ณ ํ์ฌ ์ด ์ฝ๋๋ฅผ ๋ณด๋ ๋ฉ๋ชจ์ด์ ์ด์ ์ด ์๋์ด์๋ค. ๊ทธ๋ฌ๋ฉด 3^(10^6)๋ฒ์ ์ฐ์ฐ์ด ์ต๋ ๋ฐ์ํ ์ ์๋๋ฐ ์ด๋ป๊ฒ ์๊ฐ์ด๊ณผ๊ฐ ์ ๋์์๊น? (์๋ฌธ..) ๋ํ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ปค๋ ํ๋ฒ์ cal ํจ์ ์์์ ๋์ผํ ์๊ฐ ๊ฒฐ๊ณผ๋ก ๋์ค๋ฉด ์ง์ฐ๋๋ก set์ผ๋ก ๊ตฌํ๋ ์ํด๋์๋ค.
๊ณ ์น ์ฝ๋
<ํจ์ ๋ด์ set๋ง ๊ตฌํํ ์ฝ๋>
x = int(input())
count = 0
minimum = [x]
def cal(x): # ์ฃผ์ด์ง ํ๋ ฌ์ ๋ชจ๋ ์ ๊ฐ๊ฐ์ ๋ํด์ -1, 3์ผ๋ก ๋๋๊ธฐ, 2๋ก ๋๋๊ธฐ์ 3๊ฐ์ง ์ฐ์ฐ์ ๋ชจ๋ ์งํ
a = set()
for i in x:
a.add(i-1) # 1์ ๋ชจ๋ ์ํฉ์์ ๋บ ์ ์์
if i%3 ==0: # 3์ผ๋ก ๋๋ ์ง๋ ์ํฉ
a.add(int(i/3))
if i%2 ==0: # 2๋ก ๋๋ ์ง๋ ์ํฉ
a.add(int(i/2))
return list(a)
while True:
if x == 1: # ์ฒ์ ์
๋ ฅ๋ฐ์ ์๊ฐ 1์ด๋ฉด
print(count)
break
temp = minimum[:] # minimum ํ๋ ฌ์ ์๋ค์ ์ฎ๊ฒจ๋ฐ์
minimum = []
minimum = cal(temp) # ๋ค์ ํ๋ ฌ์ ๋ฐ์
print(minimum)
count +=1
if min(minimum) == 1:
print(count)
break
ํด๋น ์ฝ๋๋ ํจ์ ๋ด์์ list๋ฅผ ์ฐ๋ ์ฝ๋๋ฅผ set์ ์ฐ๋๋ก ๋ฐ๊ฟ์ ๋์ผํ ์๊ฐ ๋์ฌ ๊ฒฝ์ฐ ์์ ๊ฒ ํ์๋ค.
๊ทธ๋ฌ๋๋ ์๋๋ ์์ ๊ฐ์ด ์ค๋ณต๋ ์๊ฐ ๊ณ์ ๋์ค๋ list๊ฐ ์๋์ ๊ฐ์ด ์ค๋ณต๋ ์๊ฐ ๋์ค์ง ์๊ฒ ๊ตฌ์ฑ๋์๋ค. ๋ฌผ๋ก set์ ํน์ฑ์ ์ ๋ ฌ๋๊ธด ํ์ง๋ง ์ด์ฐจํผ ๋ชจ๋ ์์ ๋ํด์ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์ ์๊ด์๋ค.
๋ฉ๋ชจ์ด์ ์ด์ ๋ ์๋ํด๋ณด๋ ค๊ณ ํ์ผ๋, python set ์๋ฃ๊ตฌ์กฐ์ ํน์ฑ์ add ์ฐ์ฐ์์๋ ํ์ฌ set ๋ด๋ถ์ ํด๋น ์์๊ฐ ์๋๋ฐ ๋ฎ์ด์์ฐ๋ ๊ฑด์ง ํ์ธํ ์ ์๊ณ find ์ฐ์ฐ ์ฒ๋ผ ๋ด๋ถ์ ํด๋น ์์๊ฐ ์๋์ง ์ฐพ๋ ์ฐ์ฐ์ set ์๋ฃ๊ตฌ์กฐ ํน์ฑ์ ๋น์ฐํ ์๊ธฐ ๋๋ฌธ์ ๊ตฌํํ๋ ค๋ฉด ๋ชจ๋ ์์๋ฅผ for๋ฌธ์ผ๋ก ๋๋ฆฌ๋ฉด์ ๋น๊ตํด๋ด์ผํ๋ค.
๊ทธ๋์ ๊ทธ๋ฅ ์ํ๋ค. (๋จธ์ฑ)
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python]๋ฐฑ์ค 1074๋ฒ : Z (0) | 2020.02.21 |
---|---|
[python]๋ฐฑ์ค 1019๋ฒ : ์ฑ ํ์ด์ง (0) | 2020.02.21 |
[python]๋ฐฑ์ค 4811๋ฒ : ์์ฝ (1) | 2020.02.21 |
[python]๋ฐฑ์ค 2839๋ฒ : ์คํ ๋ฐฐ๋ฌ (0) | 2020.02.01 |
[python]๋ฐฑ์ค 9095๋ฒ : 1,2,3 ๋ํ๊ธฐ (0) | 2020.02.01 |
Comment