1. ์์ด๋์ด๋ฅผ ์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ตฌํ
- ๊ตฌํ(implementation)์ด๋, ๋จธ๋ฆฟ์์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ค์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ด๋ค.
- ํํ ๋ฌธ์ ํด๊ฒฐ ๋ถ์ผ์์ ๊ตฌํ ์ ํ์ ๋ฌธ์ ๋ ํ์ด๋ฅผ ๋ ์ฌ๋ฆฌ๋ ๊ฒ์ ์ฝ์ง๋ง ์ฝ๋๋ก ์ฎ๊ธฐ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ์๋ฏธํ๋ค. ๋์ฒด๋ก ์ฌ์ํ ์กฐ๊ฑด ์ค์ ์ด ๋ง์ ๋ฌธ์ ์ผ์๋ก ์ฝ๋๋ก ๊ตฌํํ๊ธฐ๊ฐ ๊น๋ค๋กญ๋ค.
์์ ํ์
: ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฃผ์ ์์ด ๋ค ๊ณ์ฐํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ฎฌ๋ ์ด์
: ๋ฌธ์ ์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋จ๊ณ์ฉ ์ฐจ๋ก๋๋ก ์ง์ ์ํํด์ผ ํ๋ ๋ฌธ์ ์ ํ
๊ตฌํ ์ ๊ณ ๋ คํด์ผ ํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์ฌํญ
- ํ์ด์ฌ์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์๋ฃํ์ ์ง์ ํ ํ์๊ฐ ์์ผ๋ฉฐ ๋งค์ฐ ํฐ ์์ ์ฐ์ฐ๋ ์ง์ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์๋ ์ด๋ฅผ ์ผ๋์ ๋๊ณ ์ฝ๋ฉ์ ํด์ผ ํ๋ค.
์ฑ์ ํ๊ฒฝ
- ํ์ด์ฌ์ C/C++์ ๋นํด ๋์ ์๋๊ฐ ๋๋ฆฌ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์๊ฐ ๋ณต์ก๋ O(NlogN) ์ด๋ด์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ๋ค.
๊ตฌํ ๋ฌธ์ ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
- ๋ณดํต ๊ตฌํ ์ ํ์ ๋ฌธ์ ๋ ์ฌ์ํ ์กฐ๊ฑด์ ๋ฌธ์ ์์ ๋ช ์ํด์ฃผ๋ฉฐ ๋ฌธ์ ๊ฐ ๊ธธ๋ค.
- ๋ฌธ์์ด ์ฒ๋ฆฌ๊ฐ ๋ ๊น๋ค๋ก์ด ํ์ด์ฌ์ ๊ตฌํ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
PyPy
๋ ํ์ด์ฌ๊ณผ ๋ฌธ๋ฒ์ด ๋์ผํ์ง๋ง ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
์์ 1. ์ํ์ข์ฐ
๋ฌธ์
์ฌํ๊ฐ A๋ N * N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๊ณต๊ฐ ์์ ์๋ค. ์ด ๊ณต๊ฐ์ 1 * 1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๊ฐ์ฅ ์ผ์ชฝ ์ ์ขํ๋ (1, 1)์ด๋ฉฐ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์ขํ๋ (N, N)์ ํด๋นํ๋ค. ์ฌํ๊ฐ A๋ ์ํ์ข์ฐ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ, ์์ ์ขํ๋ ํญ์ (1,1)์ด๋ค. ์ฐ๋ฆฌ ์์๋ ์ฌํ๊ฐ A๊ฐ ์ด๋ํ ๊ณํ์ด ์ ํ ๊ณํ์๊ฐ ๋์ฌ์๋ค.
๊ณํ์์๋ ํ๋์ ์ค์ ๋์ด์ฐ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฌ L, R, U, D ์ค ํ๋์ ๋ฌธ์๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์ ํ์๋ค. ์ด๋ ์ฌํ๊ฐ A๊ฐ N*N ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฒ์ด๋๋ ์์ง์์ ๋ฌด์๋๋ค. ์ต์ข ์ ์ผ๋ก ๋์ฐฉํ ์ง์ ์ ์ขํ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํด์ค
์๊ตฌ์ฌํญ๋๋ก ๊ตฌํํ๋ฉด ์ฐ์ฐ ํ์๋ ์ด๋ ํ์์ ๋น๋กํ๊ฒ ๋๋ค. ์ฆ ์๊ฐ๋ณต์ก๋๋ O(N)์ด๋ค. ์ฝ๋ฉ ํ ์คํธ๋ ์๊ณ ๋ฆฌ์ฆ ๋ํ์์ ๊ฐ์ฅ ๋์ด๋๊ฐ ๋ฎ์ 1-2๋ฒ์ ๋๋ถ๋ถ ๊ทธ๋ฆฌ๋๋ ๊ตฌํ ๋ฌธ์ ์ด๋ค.
n = int(input())
x, y = 1, 1
plans = input().split()
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move = ['L', 'R', 'U', 'D']
for plan in plans :
for i in range(4):
if plan == move[i]:
nx = x + dx[i]
ny = y + dy[i]
if nx < 1 or ny < 1 or nx > n or ny > n: continue
x, y = nx, ny
print(x, y)
์์ 2. ์๊ฐ
๋ฌธ์
์ ์ N์ด ์ ๋ ฅ๋๋ฉด 00์ 00๋ถ 00์ด๋ถํฐ N์ 59๋ถ 59์ด๊น์ง์ ๋ชจ๋ ์๊ฐ ์ค์์ 3์ด ํ๋๋ผ๋ ํฌํจ๋๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํด์ค
ํ๋ฃจ๋ 86,400์ด๋ก ์ ์ผ ํฐ ๊ฒฝ์ฐ์ ์๋ 86,400๊ฐ์ง๋ฟ์ด๋ค. ๋ค์ ๋งํด ๊ฒฝ์ฐ์ ์๊ฐ 100,000๊ฐ๋ ๋์ง ์์ผ๋ฏ๋ก ํ์ด์ฌ์์ ๋ฌธ์์ด ์ฐ์ฐ์ ํ๋๋ผ๋ 2์ด ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ด๋ฌํ ์ ํ์ ์์ ํ์ ์ ํ์ผ๋ก ๋ถ๋ฅ๋๊ธฐ๋ ํ๋ค. ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ฒ์ฌํ๋ ํ์์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ 100๋ง ๊ฐ ์ดํ์ผ ๋ ์์ ํ์์ ์ฌ์ฉํ๋ฉด ์ ์ ํ๋ค.
h = int(input())
count = 0
for i in range(h + 1) :
for j in range(60):
for k in range(60):
if '3' in str(i) + str(j) + str(k):
count += 1
print(count)
2. ์์ค์ ๋์ดํธ
๋์ด๋ ํ
๋ฌธ์
ํ๋ณต ์๊ตญ์ ์์ค ์ ์์ ์ฒด์คํ๊ณผ ๊ฐ์ 8 * 8 ์ขํ ํ๋ฉด์ด๋ค. ์์ค ์ ์์ ํน์ ํ ํ ์นธ์ ๋์ดํธ๊ฐ ์ ์๋ค. ๋์ดํธ๋ ๋งค์ฐ ์ถฉ์ฑ์ค๋ฌ์ด ์ ํ๋ก์ ๋งค์ผ ๋ฌด์ ์ ์ฐ๋งํ๋ค. ๋ํฐ์ผ๋ ๋ง์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ํ ๋๋ L์ ํํ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ ์ ์ ๋ฐ์ผ๋ก๋ ๋๊ฐ ์ ์๋ค. ๋์ดํธ๋ ํน์ ํ ์์น์์ ๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ๊ฒฝ์ฐ๋ก ์ด๋ํ๋ค.
- ์ํ์ผ๋ก ๋ ์นธ ์ด๋ํ ๋ค์ ์์ง์ผ๋ก ํ ์นธ ์ด๋
- ์์ง์ผ๋ก ๋ ์นธ ์ด๋ํ ๋ค์ ์ํ์ผ๋ก ํ ์นธ ์ด๋
์ด์ฒ๋ผ 8*8 ์ขํ ํ๋ฉด์์์ ๋์ดํธ์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋ ๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ด๋ ์์ค์ ์ ์์์ ํ ์์น๋ฅผ ํํํ ๋๋ 1๋ถํฐ 8๋ก ํํํ๋ฉฐ, ์ด ์์น๋ฅผ ํํํ ๋๋ a๋ถํฐ h๋ก ํํํ๋ค.
ํด์ค
๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ํ๋์ฉ ํ์ธํ์ฌ ์ด๋ํ๋ฉด ๋๋ค. ๋ค๋ง ์ขํ ํ๋ฉด์ ๋ฒ์ด๋์ง ์๋๋ก ๊ผผ๊ผผํ๊ฒ ๊ฒ์ฌํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ฝ๋
# ํ์ฌ ๋์ดํธ์ ์์น
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1
# ๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ 8๊ฐ์ง ๋ฐฉํฅ
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
# ๊ฐ ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง ํ์ธ
result = 0
for step in steps :
next_row = row + step[0]
next_column = column + step[1]
if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
result += 1
print(result)
3. ๊ฒ์ ๊ฐ๋ฐ
๋ฌธ์
์บ๋ฆญํฐ๊ฐ ์๋ ์ฅ์๋ 1*1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ์ด๋ค์ง N * M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก, ๊ฐ๊ฐ์ ์นธ์ ์ก์ง ๋๋ ๋ฐ๋ค์ด๋ค. ์บ๋ฆญํฐ๋ ๋์๋จ๋ถ ์ค ํ ๊ณณ์ ๋ฐ๋ผ๋ณธ๋ค. ๋งต์ ๊ฐ ์นธ์ (A, B)๋ก ๋ํ๋ผ ์ ์๊ณ , A๋ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, B๋ ์์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค. ์บ๋ฆญํฐ๋ ์ํ์ข์ฐ๋ก ์์ง์ผ ์ ์๊ณ , ๋ฐ๋ค๋ก ๋์ด ์๋ ๊ณต๊ฐ์๋ ๊ฐ ์ ์๋ค. ์บ๋ฆญํฐ์ ์์ง์์ ์ค์ ํ๊ธฐ ์ํด ์ ํด ๋์ ๋งค๋ด์ผ์ ์ด๋ฌํ๋ค.
- ํ์ฌ ์์น์์ ํ์ฌ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฉํฅ๋ถํฐ ์ฐจ๋ก๋๋ก ๊ฐ ๊ณณ์ ์ ํ๋ค.
- ์บ๋ฆญํฐ์ ๋ฐ๋ก ์ผ์ชฝ ๋ฐฉํฅ์ ์์ง ๊ฐ๋ณด์ง ์์ ์นธ์ด ์กด์ฌํ๋ค๋ฉด, ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๋ค์ ์ผ์ชฝ์ผ๋ก ํ ์นธ์ ์ ์งํ๋ค. ์ผ์ชฝ ๋ฐฉํฅ์ ๊ฐ๋ณด์ง ์์ ์นธ์ด ์๋ค๋ฉด, ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ๋ง ์ํํ๊ณ 1๋จ๊ณ๋ก ๋์๊ฐ๋ค.
- ๋ง์ฝ ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ด๋ฏธ ๊ฐ๋ณธ ์นธ์ด๊ฑฐ๋ ๋ฐ๋ค๋ก ๋์ด ์๋ ์นธ์ธ ๊ฒฝ์ฐ์๋, ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ๋ค๋ก ๊ฐ๊ณ 1๋จ๊ณ๋ก ๋์๊ฐ๋ค. ๋จ, ์ด๋ ๋ค์ชฝ ๋ฐฉํฅ์ด ๋ฐ๋ค์ธ ์นธ์ด๋ผ ๋ค๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ ์์ง์์ ๋ฉ์ถ๋ค.
ํ๋ฏผ์ด๋ ์ ๊ณผ์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ฉด์ ์บ๋ฆญํฐ์ ์์ง์์ ์ด์์ด ์๋์ง ํ ์คํธํ๋ ค๊ณ ํ๋ค. ๋ฉ๋ด์ผ์ ๋ฐ๋ผ ์บ๋ฆญํฐ๋ฅผ ์ด๋์ํจ ๋ค์ ์บ๋ฆญํฐ๊ฐ ๋ฐฉ๋ฌธํ ์นธ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค.
ํด์ค
์ ํ์ ์ธ ์๋ฎฌ๋ ์ด์ ๋ฌธ์ ์ด๋ค. ๋ณ๋์ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๋ค๊ธฐ๋ณด๋ค๋ ๋ฌธ์ ์์ ์๊ตฌํ๋ ๋ด์ฉ์ ์ค๋ฅ ์์ด ์ฑ์คํ๊ฒ ๊ตฌํ๋ง ํ ์ ์๋ค๋ฉด ํ ์ ์๋ค๋ ํน์ง ์๋ค. ๋ค๋ง, ๋ฌธ์ ๊ฐ ๊ธธ๊ณ ๋ฌธ์ ๋ฅผ ๋ฐ๋ฅด๊ฒ ์ดํดํ์ฌ ์์ค์ฝ๋๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์ด ๊ฐ๋จํ์ง ์๋ค. ๋ฐ๋ณต์ ์ธ ์๋ฌ์ด ์ค์ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐฉํฅ์ ์ค์ ํด์ ์ด๋ํ๋ ๋ฌธ์ ์ ํ์์๋ dx
dy
๋ผ๋ ๋ณ๋์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๋ฐฉํฅ์ ์ ํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ค.
์ฝ๋
n, m = map(int, input().split())
d = [[0] * m for _ in range(n)]
x, y, direction = map(int, input().split())
d[x][y] = 1 # ํ์ฌ ์ขํ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
array = []
for i in range(n): array.append(list(map(int, input().split())))
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# ์ผ์ชฝ์ผ๋ก ํ์
def turn_left() :
global direction
direction -= 1
if direction == -1 : direction = 3
count = 1
turn_time = 0
while True :
turn_left()
nx = x + dx[direction]
ny = y + dy[direction]
if d[nx][ny] == 0 and array[nx][ny] == 0 : # ๊ฐ๋ณด์ง ์์ ์นธ ์กด์ฌ
d[nx][ny] = 1
x = nx
y = ny
count += 1
turn_time = 0
continue
else : # ๊ฐ๋ณด์ง ์์ ์นธ์ด ์ ๋ฉด์ ์๊ฑฐ๋ ๋ฐ๋ค์ธ ๊ฒฝ์ฐ
turn_time += 1
if turn_time == 4 :
nx = x - dx[direction]
ny = y - dy[direction]
if array[nx][ny] == 0:
x = nx
y = ny
else : break
turn_time = 0
print(count)
์ฐธ๊ณ ์๋ฃ : ์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค (๋๋๋น ์ )