์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ
4์ฅ. ๊ตฌํ
1. ์์ด๋์ด๋ฅผ ์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ตฌํ
๊ตฌํ : ๋จธ๋ฆฟ์์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ค์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ณผ์
- ์์ ํ์ : ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฃผ์ ์์ด ๋ค ๊ณ์ฐํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์๋ฎฌ๋ ์ด์
: ๋ฌธ์ ์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋จ๊ณ์ฉ ์ฐจ๋ก๋๋ก ์ง์ ์ํํด์ผํ๋ ๋ฌธ์ ์ ํ
๊ตฌํ ์ ๊ณ ๋ คํด์ผ ํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์ฌํญ
- ํ์ด์ฌ์์ ๋ฆฌ์คํธ ํฌ๊ธฐ
๋ฐ์ดํฐ์ ๊ฐ์(๋ฆฌ์คํธ์ ๊ธธ์ด) / ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
1,000 / ์ฝ 4KB
1,000,000 / ์ฝ 4MB
10,000,000 / ์ฝ 40MB
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ ํ๋ณด๋ค ๋ ์ ์ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
์ฑ์ ํ๊ฒฝ
- 1์ด์ 2000๋ง๋ฒ์ ์ฐ์ฐ์ ์ํํ๋ค๊ณ ๊ฐ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํ๋ฉด ์คํ ์๊ฐ ์ ํ์ ์์ ์ ์ด๋ค.
- ์๊ฐ ์ ํ๊ณผ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๋จผ์ ํ์ธํ ๋ค์ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ ์ ๋์ ์๊ฐ ๋ณต์ก๋์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ฑํด์ผ ํ ์ ์์ ๊ฒ์ธ์ง ์์ธกํ ์ ์์ด์ผ ํ๋ค.
๊ตฌํ ๋ฌธ์ ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
- ํ์ด์ฌ ๊ตฌํ ๋์ด๋๋ ์ฌ์ดํธ, ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ์ ๊ธด ํธ์ด๋ค.
- Pypy3์ ํ์ด์ฌ3๋ณด๋ค ์คํ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค. ์ฝ๋ฉ ํ
์คํธ ํ๊ฒฝ์ด Pypy3์ ์ง์ํ๋ค๋ฉด ์ด๋ฅผ ์ด์ฉํ ๊ฒ
์์ 4-1. ์ํ์ข์ฐ
- ์ด๋ ํ์๊ฐ n๋ฒ์ผ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ค. ์๊ฐ ๋ณต์ก๋๋ ๋๋ํ ํธ
- ์๋ฎฌ๋ ์ด์
(Simulation) ์ ํ
< ๋ต์ ์์ >
# N์ ์
๋ ฅ๋ฐ๊ธฐ
n = int(input())
x, y = 1, 1
plans = input().split()
# L, R, U, D์ ๋ฐ๋ฅธ ์ด๋ ๋ฐฉํฅ
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = [‘L’, ‘R’, ‘U’, ‘D’]
# ์ด๋ ๊ณํ์ ํ๋์ฉ ํ์ธ
for plan in plans:
# ์ด๋ ํ ์ขํ ๊ตฌํ๊ธฐ
for i in range(len(move_types)):
if plan == move_types[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)
์์ 4-2. ์๊ฐ
- ๋ชจ๋ ์๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ํ๋์ฉ ๋ชจ๋ ์ธ์ ํธ๋ ๋ฌธ์
- ๊ฒฝ์ฐ์ ์๊ฐ 86, 400๊ฐ์ง ๋ฐ์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด ์ฐ์ฐ์ ์ด์ฉํด 3์ด ์๊ฐ์ ํฌํจ๋์ด ์๋์ง ํ์ธํด๋ ์๊ฐ ์ ํ 2์ด ์์ ๋ฌธ์ ํด๊ฒฐ ๊ฐ๋ฅ
- ์ ์ฒด ์, ๋ถ, ์ด์ ๋ํ ๊ฒฝ์ฐ์ ์๋ 24 X 60 X 60 ์ด๋ฉฐ 3์ค ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ๊ณ์ฐ
- ์์ ํ์(Brute Forcing) ์ ํ
< ๋ต์ ์์ >
# H๋ฅผ ์
๋ ฅ๋ฐ๊ธฐ
n = int(input())
count = 0
for h in range(n + 1):
for m in range(60):
for s in range(60):
# ๋งค ์๊ฐ ์์ '3'์ด ํฌํจ๋์ด ์๋ค๋ฉด ์นด์ดํธ ์ฆ๊ฐ
if '3' in str(h) + str(m) + str(s):
count += 1
print(count)
์ค์ ๋ฌธ์ 2. ์์ค์ ๋์ดํธ
- ์ํ์ข์ฐ์ ๋น์ทํ ๋ฌธ์
- ๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ๋ฐฐ์ด์ ๋ด๊ณ ์ด ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ํ๋์ฉ ๊ฒ์ฌํ๋ค
< ๋ต์ ์์ >
# ํ์ฌ ๋์ดํธ์ ์์น ์
๋ ฅ๋ฐ๊ธฐ
start = input()
x = ord(start[0]) # ์ด (๋ฌธ์๋ฅผ ์์คํค์ฝ๋๋ก ๋ณํ)
y = start[1] # ํ
# ๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ 8๊ฐ์ง ๋ฐฉํฅ ์ ์
move_type = [(2, 1), (-2, 1), (2, -1), (-2, -1), (1, 2), (1, -2), (-1, 2), (-1, -2)]
count = 0
# 8๊ฐ์ง ๋ฐฉํฅ์ ๋ํ์ฌ ๊ฐ ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง ํ์ธ
for i in range(8):
nx = chr(x + move_type[i][0])
ny = int(y) + move_type[i][1]
# ํด๋น ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ๋ค๋ฉด ์นด์ดํธ ์ฆ๊ฐํ๊ณ ์๋๋ฉด ๋ฌด์ํ๊ณ ๋ค์ ๊ฒฝ์ฐ์ ์ ์งํ
if nx < 'a' or nx > 'h' or ny < 1 or ny > 8:
continue
else:
count += 1
print(count)
์ค์ ๋ฌธ์ 3. ๊ฒ์ ๊ฐ๋ฐ
- ์๋ฎฌ๋ ์ด์ ๋ฌธ์
- ์ผ์ฑ SW ์ฝ๋ฉํ ์คํธ์์ ์์ฃผ ์ถ์ ๋๋ ๋ํ์ ์ธ ์ ํ
- ๋ฐฉํฅ์ ์ค์ ํด์ ์ด๋ํ๋ ๋ฌธ์ ์ ํ์์๋ dx, dy๋ผ๋ ๋ณ๋์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๋ฐฉํฅ์ ์ ํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ค
< ๋ต์ ์์ >
n, m = map(int, input().split())
# ๋ฐฉ๋ฌธํ ์์น๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋งต์ ์์ฑํ์ฌ 0์ผ๋ก ์ด๊ธฐํ
d = [[0] * m for _ in range(n)]
# ํ์ฌ ์บ๋ฆญํฐ์ X์ขํ, Y์ขํ, ๋ฐฉํฅ์ ์
๋ ฅ๋ฐ๊ธฐ
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)