์๋ ํ์ธ์, ์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 14891๋ฒ ๋ฌธ์ ์ธ “ํฑ๋๋ฐํด” ๋ฌธ์ ๋ฅผ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ํ์ ๋ช ๋ น์ ๋ฐ๋ผ ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํค๊ณ , ์ต์ข ์ํ๋ฅผ ๋ฐํ์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค. ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ , ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํ, ์ต์ข ์ ์ธ ์ ๋ต ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ URL: https://www.acmicpc.net/problem/14891
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
๋ค ๊ฐ์ ํฑ๋๋ฐํด๊ฐ ์์ต๋๋ค. ๊ฐ ํฑ๋๋ฐํด๋ 8๊ฐ์ ํฑ๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ ํฑ๋๋ N๊ทน ๋๋ S๊ทน์ ๋ํ๋ ๋๋ค. ์ฃผ์ด์ง ํ์ ๋ช ๋ น์ ๋ฐ๋ผ ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํค๊ณ ์ต์ข ์ํ๋ฅผ ๋ฐํ์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ๋ฒ์งธ ์ค๋ถํฐ ๋ค ์ค์ ๊ฑธ์ณ ๊ฐ ํฑ๋๋ฐํด์ ์ํ๊ฐ ์ฃผ์ด์ง๋๋ค. ์ํ๋ 8๊ฐ์ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด๋ก, 0์ N๊ทน, 1์ S๊ทน์ ๋ํ๋ ๋๋ค.
• ๋ค์ฏ ๋ฒ์งธ ์ค์ ํ์ ํ์ K๊ฐ ์ฃผ์ด์ง๋๋ค. (1 ≤ K ≤ 100)
• ์ดํ K๊ฐ์ ์ค์ ๊ฑธ์ณ ํ์ ๋ช ๋ น์ด ์ฃผ์ด์ง๋๋ค. ๊ฐ ๋ช ๋ น์ ๋ ๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ฒซ ๋ฒ์งธ ์ ์๋ ํ์ ์ํฌ ํฑ๋๋ฐํด์ ๋ฒํธ, ๋ ๋ฒ์งธ ์ ์๋ ํ์ ๋ฐฉํฅ์ ๋๋ค. 1์ ์๊ณ ๋ฐฉํฅ, -1์ ๋ฐ์๊ณ ๋ฐฉํฅ์ ๋ํ๋ ๋๋ค.
3) ์ถ๋ ฅ
• ์ต์ข ํฑ๋๋ฐํด์ ์ํ๋ฅผ ๋ฐํ์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ํฑ๋๋ฐํด์ ์ํ๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
• ํ์ ๋ช ๋ น์ ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ์ ์ ์ฅํฉ๋๋ค.
2) ํ์ ๊ฒฐ์
• ํ์ ๋ช ๋ น์ ์ฒ๋ฆฌํ๋ฉด์ ๊ฐ ํฑ๋๋ฐํด์ ํ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
• ํ์ฌ ํฑ๋๋ฐํด์ ํ์ ์ ๋ฐ๋ผ ์ธ์ ํ ํฑ๋๋ฐํด๊ฐ ํ์ ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
• ๋ง๋ฌผ๋ฆฐ ํฑ๋๊ฐ ๋ค๋ฅด๋ฉด ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ํ์ ํฉ๋๋ค.
3) ํ์ ์ํ
• ๊ฐ ํ์ ๋ช ๋ น์ ์ค์ ๋ก ์ํํ์ฌ ํฑ๋๋ฐํด์ ์ํ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
• ๊ฐ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ์ ๊ฐ๋ฆฌํค๋ ํฑ๋์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
4) ์ ์ ๊ณ์ฐ
• ๊ฐ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ํฉ์ฐํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ํฑ๋๋ฐํด ์ํ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์ด๊ธฐํ, ์ฒ์์ ๋น ๊ฐ์ ํ๋ ๋ฃ์ด 1๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์ฌ์ฉ
arr = [[0] * 8]
for _ in range(4):
arr.append(list(map(int, input().rstrip())))
# ๊ฐ ํฑ๋๋ฐํด์ ํ์ฌ ํฑ๋๊ฐ 12์ ๋ฐฉํฅ์ ๊ฐ๋ฆฌํค๋ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด ์ด๊ธฐํ
top = [0] * 5
K = int(input()) # ํ์ ํ์ ์
๋ ฅ ๋ฐ์
for _ in range(K):
move = [] # ํ์ ๋ช
๋ น์ ์ ์ฅํ ๋ฆฌ์คํธ
idx, dr = map(int, input().split()) # ํ์ ํ ํฑ๋๋ฐํด ๋ฒํธ(idx)์ ๋ฐฉํฅ(dr) ์
๋ ฅ ๋ฐ์
move.append((idx, dr)) # ์ฒ์ ํ์ ํ ํฑ๋๋ฐํด์ ๋ฐฉํฅ์ ๋ฆฌ์คํธ์ ์ถ๊ฐ
# ํ์ฌ ํฑ๋๋ฐํด ๊ธฐ์ค ์ค๋ฅธ์ชฝ ํฑ๋๋ฐํด ํ์ ์ฌ๋ถ ๊ฒฐ์
for i in range(idx+1, 5):
if arr[i-1][(top[i-1] + 2) % 8] != arr[i][(top[i] + 6) % 8]: # ๋ง๋ฟ๋ ํฑ๋๊ฐ ๋ค๋ฅด๋ฉด
if (i - idx) % 2 != 0: # ํ์ ๋ฒ์งธ ๋จ์ด์ง ํฑ๋๋ฐํด๋ ๋ฐ๋ ๋ฐฉํฅ ํ์
move.append((i, -dr))
else: # ์ง์ ๋ฒ์งธ ๋จ์ด์ง ํฑ๋๋ฐํด๋ ๊ฐ์ ๋ฐฉํฅ ํ์
move.append((i, dr))
else:
break # ๋ง๋ฟ๋ ํฑ๋๊ฐ ๊ฐ์ผ๋ฉด ๋ ์ด์ ํ์ ํ์ง ์์
# ํ์ฌ ํฑ๋๋ฐํด ๊ธฐ์ค ์ผ์ชฝ ํฑ๋๋ฐํด ํ์ ์ฌ๋ถ ๊ฒฐ์
for i in range(idx-1, 0, -1):
if arr[i+1][(top[i+1] + 6) % 8] != arr[i][(top[i] + 2) % 8]: # ๋ง๋ฟ๋ ํฑ๋๊ฐ ๋ค๋ฅด๋ฉด
if (idx - i) % 2 != 0: # ํ์ ๋ฒ์งธ ๋จ์ด์ง ํฑ๋๋ฐํด๋ ๋ฐ๋ ๋ฐฉํฅ ํ์
move.append((i, -dr))
else: # ์ง์ ๋ฒ์งธ ๋จ์ด์ง ํฑ๋๋ฐํด๋ ๊ฐ์ ๋ฐฉํฅ ํ์
move.append((i, dr))
else:
break # ๋ง๋ฟ๋ ํฑ๋๊ฐ ๊ฐ์ผ๋ฉด ๋ ์ด์ ํ์ ํ์ง ์์
# ํ์ ๋ช
๋ น์ ์ค์ ๋ก ์ํ
for idx, dr in move:
top[idx] = (top[idx] - dr + 8) % 8 # ๋ฐฉํฅ์ ๋ฐ๋ผ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ ๊ฐฑ์
# ์ต์ข
์ ์ ๊ณ์ฐ
ans = 0
for i in range(1, 5):
if i == 1:
ans += (arr[i][top[i]] * 1)
elif i == 2:
ans += (arr[i][top[i]] * 2)
elif i == 3:
ans += (arr[i][top[i]] * 4)
elif i == 4:
ans += (arr[i][top[i]] * 8)
print(ans) # ์ต์ข
์ ์ ์ถ๋ ฅ
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• ์ฒซ ๋ฒ์งธ ์ค์์ ๋ค ๊ฐ์ ํฑ๋๋ฐํด ์ํ๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ค์ฏ ๋ฒ์งธ ์ค์์ ํ์ ํ์ K๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ์ดํ K๊ฐ์ ํ์ ๋ช ๋ น์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ๋ณ์ ์ด๊ธฐํ
• arr ๋ฐฐ์ด: ๊ฐ ํฑ๋๋ฐํด์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
• top ๋ฐฐ์ด: ๊ฐ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ์ ๊ฐ๋ฆฌํค๋ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํฉ๋๋ค.
• move ๋ฆฌ์คํธ: ํ์ ๋ช ๋ น์ ์ ์ฅํฉ๋๋ค.
3) ํ์ ์ฌ๋ถ ๊ฒฐ์
• ๊ฐ ํ์ ๋ช ๋ น์ ๋ํด ํ์ฌ ํฑ๋๋ฐํด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ๊ณผ ์ผ์ชฝ ํฑ๋๋ฐํด์ ํ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
• ๋ง๋ฌผ๋ฆฐ ํฑ๋๊ฐ ๋ค๋ฅด๋ฉด ๋ฐ๋ ๋ฐฉํฅ ๋๋ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํ์ ํฉ๋๋ค.
4) ํ์ ์ํ
• ๊ฐ ํ์ ๋ช ๋ น์ ์ค์ ๋ก ์ํํ์ฌ ํฑ๋๋ฐํด์ ์ํ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
• ๊ฐ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
5) ์ ์ ๊ณ์ฐ
• ๊ฐ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ต์ข ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.\
์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ
์ด ๋ฌธ์ ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ๊ฐ ๋จ๊ณ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
1) ์ ๋ ฅ ์ฒ๋ฆฌ
• ํฑ๋๋ฐํด ์ํ๋ฅผ ์ ๋ ฅ๋ฐ๋ ๋ถ๋ถ: O(1)
• ํ์ ๋ช ๋ น์ ์ ๋ ฅ๋ฐ๋ ๋ถ๋ถ: O(K), ์ฌ๊ธฐ์ K๋ ํ์ ๋ช ๋ น์ ์์ ๋๋ค.
2) ํ์ ์ฌ๋ถ ๊ฒฐ์
• ๊ฐ ํ์ ๋ช ๋ น๋ง๋ค ์ค๋ฅธ์ชฝ๊ณผ ์ผ์ชฝ ํฑ๋๋ฐํด๋ฅผ ํ์ธํ๋ ๋ถ๋ถ:
• ๊ฐ ํฑ๋๋ฐํด๋ง๋ค ์ต๋ 4๊ฐ์ ํฑ๋๋ฐํด๋ฅผ ํ์ธํ ์ ์์ผ๋ฏ๋ก ์ด ๋ถ๋ถ์ O(1)์ ๋๋ค.
3) ํ์ ์ํ
• ๊ฐ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ถ๋ถ: O(K), ์ฌ๊ธฐ์ K๋ ํ์ ๋ช ๋ น์ ์์ ๋๋ค.
4) ์ต์ข ์ ์ ๊ณ์ฐ
• ๊ฐ ํฑ๋๋ฐํด์ 12์ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ถ๋ถ: O(1)
๋ฐ๋ผ์, ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ ์ ๋ ฅ ์ฒ๋ฆฌ์ ํ์ ์ํ ๋จ๊ณ์์ O(K)์ ๋๋ค. ์ฆ, ์ด ๋ฌธ์ ์ ์๊ฐ ๋ณต์ก๋๋ O(K)์ ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 1389[์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น] (0) | 2024.07.23 |
---|---|
BOJ(๋ฐฑ์ค) 11724[์ฐ๊ฒฐ ์์์ ๊ฐ์] (0) | 2024.07.22 |
BOJ(๋ฐฑ์ค) 5525[IOIOI] (0) | 2024.07.18 |
BOJ(๋ฐฑ์ค) 1417[๊ตญํ์์ ์ ๊ฑฐ] (0) | 2024.07.17 |
BOJ(๋ฐฑ์ค) 14503[๋ก๋ด ์ฒญ์๊ธฐ] (0) | 2024.07.16 |