๋ฌธ์
ํ์๋ 2์ฐจ์ ๋ฐฐ์ด (ํญ์ 2^N * 2^N ํฌ๊ธฐ์ด๋ค)์ Z๋ชจ์์ผ๋ก ํ์ํ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 2*2๋ฐฐ์ด์ ์ผ์ชฝ ์์นธ, ์ค๋ฅธ์ชฝ ์์นธ, ์ผ์ชฝ ์๋์นธ, ์ค๋ฅธ์ชฝ ์๋์นธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด Z๋ชจ์์ด๋ค.
๋ง์ฝ, 2์ฐจ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 2^N * 2^N๋ผ์ ์ผ์ชฝ ์์ ์๋ ์นธ์ด ํ๋๊ฐ ์๋๋ผ๋ฉด, ๋ฐฐ์ด์ 4๋ฑ๋ถ ํ ํ์ (ํฌ๊ธฐ๊ฐ ๊ฐ์ 2^(N-1)๋ก) ์ฌ๊ท์ ์ผ๋ก ์์๋๋ก ๋ฐฉ๋ฌธํ๋ค.
๋ค์ ์๋ 2^2 * 2^2 ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ฐฉ๋ฌธํ ์์์ด๋ค.
N์ด ์ฃผ์ด์ก์ ๋, (r, c)๋ฅผ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋์ง ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ค์ ๊ทธ๋ฆผ์ N=3์ผ ๋์ ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N r c๊ฐ ์ฃผ์ด์ง๋ค. N์ 15๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , r๊ณผ c๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 2^N-1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฌธ์ ์ ์ ๋ต์ ์ถ๋ ฅํ๋ค.
๋์ ๋ต
์๊ณ ๋ฆฌ์ฆ
ํ ์ขํ์ ์์น๋ฅผ 4๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ์ด์ฉํด ์ฌ๊ท์ ์ผ๋ก ๊ณ์ ๋๋ ์ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌ
-
๋ช ๋ฒ์งธ Z์ธ์ง ์ฐพ๊ธฐ
-
์ฃผ์ด์ง ํ์ 1/4๋ก ๋๋์์ ๋, ์ด๋์ ์ํ๋ ์ง ์ ์ฅ
-
1๋ฒ์ ๋๋ ๋ฌถ์์ด 4์นธ์ง๋ฆฌ๊ฐ ๋์์ ๋๊น์ง (๊ฐ์ฅ ์์ Z๊ฐ ๋ ๋๊น์ง) ์งํ
์ฃผ์ด์ง n์ด 1์ด ๋ ๋๊น์ง 1์ฉ ๋นผ๊ฐ๋ฉด์ ํ๋ฉด ๋จ
-
-
1์์ ์ฐพ์ Z ๋ชจ์์์ ๋ช๋ฒ์งธ์ ์ํ๋ ์ง ์ฐพ๊ธฐ
์ ๋ ฅ์ด 3 1 6 ์ผ ๋์ ์ํฉ์ ๋ํ๋ธ ๊ฒ์ด๋ค.
findLocation ํจ์๋ n์ด 1์ด๋ฉด ์ ์ฅํด๋ array๋ฅผ returnํ๋ค. ๊ทธ ์ ๊น์ง๋ n์ 1์ฉ ๊ฐ์์์ผ๊ฐ๋ฉฐ 2^(n-1)์ ๊ธฐ์ค์ผ๋ก x, y ๊ฐ์ ๋น๊ตํ๋ค. ์ฝ๊ฒ ๋งํด์ z๋ชจ์์ผ๋ก 1,2,3,4๋ก ๋ํ๋ด์ array์ ์ ์ฅํ๋ค.
findLocation ํจ์๋ฅผ ์ง๋๋ฉด ๋ฐฐ์ด์ด ๋์์ ๊ฐ์ฅ ์์ Z๋ชจ์์ด ๋์ฌ ๋๊น์ง ํด๋น ์๊ฐ ์ด๋ค ์์น์ ์์๋์ง๋ฅผ ๋ํ๋ธ๋ค. ์์ ๊ทธ๋ฆผ์์ ์ฐพ๊ณ ์ํ๋ (1,6) ์์น์ 22๋ ์ฒซ๋ฒ์งธ ์ฃผํฉ์ ํ ๋๋ฆฌ์์ ์ฐพ์ ๋(2^2 ๊ธฐ์ค) 2๋ฒ์งธ ์์น์ ์๊ณ , ๋๋ฒ์งธ ๋นจ๊ฐ์ ํ ๋๋ฆฌ์์ ์ฐพ์ ๋(2^1 ๊ธฐ์ค) ๋ํ 2๋ฒ์จฐ ์์น์ ์๋ค. ๋๋ฒ์งธ ๋นจ๊ฐ ํ ๋๋ฆฌ๊ฐ ๊ฐ์ฅ ์์ Z๋ชจ์์ด๋ฏ๋ก ์์ผ๋ฏ๋ก array์ [2,2]๋ฅผ ์ ์ฅํ ํ return ํ๋ค.
๊ทธ ํ, calIndex ํจ์๋ก ์ฃผ์ด์ง ์์น์ ์๋ ์๋ฅผ ๊ณ์ฐํ๋๋ฐ, array์์ ์๋ฅผ ํ๋์ฉ ๊บผ๋ด๋ฉด์ 4์ ์ง์์น๋งํผ์ ๊ณฑํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
ํด๋น ์์ ์ฃผํฉ์ ํ ๋๋ฆฌ์์ 2๋ฒ์งธ์ ์์นํ์ผ๋ฏ๋ก 4^2๋งํผ์ ์ซ์๊ฐ (2-1)๋ฒ ์ง๋๊ฐ๊ณ , ๋นจ๊ฐ ํ ๋๋ฆฌ์์ 2๋ฒ์งธ์ ์์นํ์ผ๋ฏ๋ก 4^1๋งํผ์ ์ซ์๊ฐ (2-1)๋ฒ ์ง๋๊ฐ์์ ์๋ฏธํ๋ค.
์ฌ๊ธฐ๊น์ง ๊ณ์ฐํ๋ฉด ๋ฐ๋ก ์ Z๋ชจ์๊น์ง์ ์๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค. ํ์ฌ Z๋ชจ์์์ ํด๋น ์์น๊ฐ ์ด๋ค ์๋ฅผ ๋ํ๋ด๋ ์ง ์๋ ค๋ฉด Z์์ ์ด๋ ์ชฝ์ ์์นํ๋์ง ํ์ ํด์ผํ๋ค. ์ด๋ ์ฃผ์ด์ง r, c๋ฅผ ๊ฐ์ง๊ณ ํ๋จ์ ํ ์ ์๋ค.
r,c๊ฐ ๋ชจ๋ ์ง์์ด๋ฉด Z๋ชจ์์ ์ฒซ๋ฒ์งธ์ ์์นํ๋ฏ๋ก 0์ ๋ํด์ฃผ๊ณ , Z๋ชจ์์ ๋ฐ๋ผ์ 1์ฉ ์ถ๊ฐ๋๋ ๊ฐ๋ ์ด๋ค. ์ด ๋ง์ ๊น์ง ๋ง์น๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํด๋น ์์น์ ํด๋นํ๋ ์๊ฐ ์ถ๋ ฅ๋๋ค.
์ฝ๋
import math
N,c,r = map(int,input().split()) #c: y, r: x
def findLocation(loc_index,x,y,n): # ์์น ์ ๋ณด ๋ฐํ
if n==1: # ๊ฐ์ฅ ์์ Z๋ชจ์์ผ ๋
return loc_index
location = 0
if x<pow(2,n-1):
if y<pow(2,n-1):
location = 1
else:
location = 3
y-=pow(2,n-1)
else:
if y<pow(2,n-1):
location = 2
x-=pow(2,n-1)
else:
location = 4
x-=pow(2,n-1)
y-=pow(2,n-1)
loc_index.append(location)
return findLocation(loc_index,x,y,n-1)
def calIndex(loc_index,n,sum):
if n!=1:
for i in range(n-2,-1,-1): # ๋ช๋ฒ์งธ Z์ธ์ง
sum+=int(pow(4,n-i-1)*(loc_index[i]-1))
if r%2: # Z์์ ์์น ํ์
if c%2:
sum+=3
else:
sum+=1
else:
if c%2:
sum+=2
#else:sum+=0
return sum
location_array = list()
location_array = findLocation(location_array,r,c,N)
if len(location_array)==N-1:
print(calIndex(location_array,N,0))
else:
print("error")
์๊ฐ ๋ณต์ก๋
์ฌ๊ทํจ์๊ฐ ์์ผ๋ฏ๋ก ์ต์ ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ตฌํด๋ณด์. ์ ๋ ฅ N์ด 15์ดํ์ด๋ฏ๋ก, 15์ผ ๋ findLocation ํจ์์์ ์ฌ๊ท๊ฐ 14๋ฒ ์คํ๋๋ค. ์ด ๊ฒฝ์ฐ๊ฐ ์ต์ ์ด๊ณ calIndex ํจ์๋ for๋ฌธ์ด O(1)์ด๋ฏ๋ก ๊ณ์ฐํ ํ์๊ฐ ์๋ค.
N์ 15๋ก ๋๊ณ ๋๋ ธ์ ๋, 0.02s ์์๋์๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
N์ 15๋ก ๋๊ณ ๋๋ ธ์ ๋, 9128KB ์๋ชจ๋์๋ค.
๋๋ ์
๊ฒฝ๊ณ๊ฐ์ผ๋ก ์ ์ถ ์ ํ ์คํธ ํด๋ณด๋ ๊ฒ์ ํ์์ธ ๋ฏํ๋ค.
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python]๋ฐฑ์ค 5620๋ฒ : ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์ ์ ๊ฑฐ๋ฆฌ (0) | 2020.03.01 |
---|---|
[python]๋ฐฑ์ค 1992๋ฒ : ์ฟผ๋ํธ๋ฆฌ (0) | 2020.02.29 |
[python]๋ฐฑ์ค 1019๋ฒ : ์ฑ ํ์ด์ง (0) | 2020.02.21 |
[python]๋ฐฑ์ค 4811๋ฒ : ์์ฝ (1) | 2020.02.21 |
[python]๋ฐฑ์ค 2839๋ฒ : ์คํ ๋ฐฐ๋ฌ (0) | 2020.02.01 |
Comment