๐ค๋ฌธ์ ํด๊ฒฐ
1. ์ฌ๊ท,๋ถํ ์ ๋ณต | S1
2. ๋ชจ๋ ์ชผ๊ฐ๋ ค๊ณ ํ๋๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ด๊ณผ ํน์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
3. ๋ด๊ฐ ์ฐพ๊ณ ์ํ๋ ํ๊ณผ ์ด์ด ํฌํจ๋ ๋ฐ์ค๋ง ์ฐพ์์ ์ฌ๊ทํจ์๋ฅผ ์คํ์ํจ๋ค.
4. ์ฌ๊ธฐ์ ๊ฐ ๋ฐ์ค์ ์ฒซ ์ซ์๋ฅผ ๊ตฌํ๋ค.
(1) ์๋ฅผ ๋ค์ด ์ฌ์ด์ฆ๊ฐ 8์ธ ๋ฐ์ค์ ์ฒซ์ซ์๋ 0์ด๋ค. ์ผ์ชฝ ์, ์ค๋ฅธ์ชฝ ์, ์ผ์ชฝ ์๋, ์ค๋ฅธ์ชฝ ์๋ ์์ผ๋ก ๋ฐ์ค๋ฅผ ์ชผ๊ฐ๋ฉด
(2) ๊ฐ ๋ฐ์ค์ ์ฒซ ์ซ์๋ 0, 16, 32, 46 ์ด๋ค.
(3) ์ผ์ชฝ ์ ๋ฐ์ค๋ ๊ทธ๋๋ก, ์ค๋ฅธ์ชฝ ์ ๋ฐ์ค๋ ์ฒซ์ซ์์ (size//2)**2*1 ๊ฐ์ ๋ํด์ค๋ค.
(4) ์ผ์ชฝ ์๋ ๋ฐ์ค๋ ์ฒซ์ซ์์ (size//2)**2*2 ๊ฐ์, ์ค๋ฅธ์ชฝ ์๋ ๋ฐ์ค๋ ์ฒซ์ซ์์ (size//2)**2*3 ๊ฐ์ ๋ํด์ค๋ค.
5. ๋ฐ์ค์ ํฌ๊ธฐ๊ฐ 2๊ฐ ๋๋ฉด ์ฐพ๊ณ ์ ํ๋ ํ๊ณผ ์ด์ ์ฐพ์์ ํด๋น ์ซ์๋ฅผ ์ถ๋ ฅํ๋ค.
( ๋ฐ์ค์ ํฌ๊ธฐ๊ฐ 1์ผ๋๋ ๊ฐ๋ฅํ์ง๋ง ์ฌ๊ท ๊น์ด๋ฅผ ์ค์ด๊ธฐ ์ํด )
๐จ ์ฒ์์ ๋ชจ๋ ๋ฐ์ค๋ฅผ ์ชผ๊ฐ๊ณ ์ซ์๋ฅผ ํ๋ํ๋ ์ฑ์๊ฐ๋ฉด์ ๊ตฌํ๋๋ ๋ต์ ๋์ค์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ ๋ค์ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ชจ๋ ๋ฐ์ค ์ชผ๊ฐ๊ณ ์ ๋นํ ์ซ์๋ฅผ ๋๋ ค๋ง์ท์ง๋ง ์๊ฐ์ด๊ณผ ๋ฐ์.
๋ง์ง๋ง์ผ๋ก ๋ด๊ฐ ์ํ๋ ๋ฐ์ค๋ง ์ฐพ์๋ค์ด๊ฐ๊ณ ๊ท์น์ ์์๋ด์ ๊ฐ์ ๊ตฌํด์ ํต๊ณผ - ๋์ด๋์ ๋นํด ๋๋ฌด ์ค๋๊ฑธ๋ ธ๋ค...
๐ป์์ค ์ฝ๋
def Z(row, col, size, num): # (row,col: ์๋ฅธ box์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค, size: box ์ฌ์ด์ฆ, num: box ์์์ ์ ์ซ์)
if size == 2: # ์ฌ์ด์ฆ๊ฐ 2x2๊ฐ ๋์ ๋
if row == r and col == c:
print(num)
return
num += 1
if row == r and col + 1 == c:
print(num)
return
num += 1
if row + 1 == r and col == c:
print(num)
return
num += 1
if row + 1 == r and col + 1 == c:
print(num)
return
num += 1
else:
half_size = size // 2
# ์ผ์ชฝ ์
if row <= r < row + half_size and col <= c < col + half_size:
Z(row, col, half_size, num)
# ์ค๋ฅธ์ชฝ ์
elif row <= r < row + half_size and col + half_size <= c < col + size:
Z(row, col + half_size, half_size, num + (half_size ** 2) * 1)
# ์ผ์ชฝ ์๋
elif row + half_size <= r < row + half_size * 2 and col <= c < col + half_size:
Z(row + half_size, col, half_size, num + (half_size ** 2) * 2)
# ์ค๋ฅธ์ชฝ ์๋
elif row + half_size <= r < row + half_size * 2 and col + half_size <= c < col + size:
Z(row + half_size, col + half_size, half_size, num + (half_size ** 2) * 3)
if __name__ == "__main__":
N, r, c = map(int, input().split())
Z(0, 0, 2 ** N, 0)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/1074
๋ฌธ์
ํ์๋ 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๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฌธ์ ์ ์ ๋ต์ ์ถ๋ ฅํ๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌธ์์ด ์์ถ(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.08.21 |
---|---|
[python] SWEA - 1389. ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2020.08.20 |
[python] ๋ฐฑ์ค - 11048. ์ด๋ํ๊ธฐ (0) | 2020.08.18 |
[python] SWEA - 4261. ๋น ๋ฅธ ํด๋์ ํ ํคํจ๋ (0) | 2020.08.17 |
[python] SWEA - 1238. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 10์ผ์ฐจ - Contact (0) | 2020.08.16 |