๊ตฌํ
'๋จธ๋ฆฟ์์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ค์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ณผ์ '
-> ๋ชจ๋ ๋ฒ์์ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ์ ํ์ ํฌํจํ๋ ๊ฐ๋
-> ํ๋ก๊ทธ๋๋ฐ ๋ฌธ๋ฒ ์์ง, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ๊ฒฝํ์ ๋๋ ค์ผ ํจ.
· ์์ ํ์: ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฃผ์ ์์ด ๋ค ๊ณ์ฐํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
· ์๋ฎฌ๋ ์ด์ : ๋ฌธ์ ์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋จ๊ณ์ฉ ์ฐจ๋ก๋๋ก ์ง์ ์ํ
๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์ฌํญ
- C/C++์์ ๋ณ์์ ํํ ๋ฒ์
(int 4๋ฐ์ดํธ, long 8๋ฐ์ดํธ -> ํ์ด์ฌ X, ์๋ฐ BigInteger, C++ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์)
- ํ์ด์ฌ์์ ๋ฆฌ์คํธ ํฌ๊ธฐ
(๋ฐ์ดํฐ์ ๊ฐ์ 1000 -> ๋ฉ๋ชจ๋ฆฌ 4KB / ๋ฐฑ๋ง -> 4MB / ์ฒ๋ง -> 40MB)
์ฑ์ ํ๊ฒฝ
- ํ์ด์ฌ์ C/C++์ ๋นํด ๋์ ์๋ ๋๋ฆผ. 1์ด์ 2,000๋ง ๋ฒ์ ์ฐ์ฐ์ ์ํํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ํฌ๊ฒ ๋ฌด๋ฆฌ ์์.
- ์๊ฐ ์ ํ 1์ด, ๋ฐ์ดํฐ์ ๊ฐ์ 100๋ง ๊ฐ -> O(NlogN)
- ์ด์ฒ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ๋๋ ์๊ฐ ์ ํ๊ณผ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๋จผ์ ํ์ธํ ํ ์ด๋ ์ ๋ ์๊ฐ ๋ณต์ก๋๋ก ์์ฑํ ์ง ์์ธก
๊ตฌํ ๋ฌธ์ ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
- ๋ณดํต ๊ตฌํ ์ ํ์ ๋ฌธ์ ๋ ์ฌ์ํ ์ ๋ ฅ ์กฐ๊ฑด ๋ฑ์ ๋ฌธ์ ์์ ๋ช ์ํด์ฃผ๋ฉฐ ๋ฌธ์ ์ ๊ธธ์ด๊ฐ ๊ฝค ๊ธด ํธ์.
- ํ์ด์ฌ์ ๊ตฌํ ๋์ด๋๋ ์ฌ์ด ํธ์ด์ง๋ง ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ์ด ๊ธด ํธ. (↔ C/C++)
- Pypy3๋ ํ์ด์ฌ3์ ๋ฌธ๋ฒ ์ง์, ์คํ์๋ ๋น ๋ฆ.
- API ๊ฐ๋ฐ ๋ฌธ์ (+ ์น ์๋ฒ, ๋ฐ์ดํฐ ๋ถ์์ ๋ํ ์ง์)
์์ 1. ์ํ์ข์ฐ
- ๋ด ์ฝ๋: L, R, U, D ํ๋ํ๋ ๋น๊ตํด์ ์ฐ์ฐํจ.
n = int(input())
move = list(input().split())
x = 1
y = 1
for i in move:
if i == 'L':
if y != 1:
y -= 1
elif i == 'R':
if y != n:
y += 1
elif i == 'U':
if x != 1:
x -= 1
else:
if x != n:
x += 1
print(x, y)

- ๊ต์ฌ ์ฝ๋: ๋ฐฐ์ด์ ์ด์ฉํด์ L, R, U, D ๋น๊ตํด์ ์ฐ์ฐ ์ํ. ๊ธฐ์กด ๊ฐ + ์์ ๊ฐ
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)
์์ 2. ์๊ฐ
- ๋ด ์ฝ๋: ์ ์ฒด ์๊ฐ - 3์ด ํฌํจ๋์ง ์๋ ์๊ฐ (์ซ์์ฐ์ฐ)
n = int(input())
a = (n+1) * 6 * 10 * 6 * 10
if n >= 3:
b = n * 5 * 9 * 5 * 9
else:
b = (n+1) * 5 * 9 * 5 * 9
print(a-b)

- ๊ต์ฌ ์ฝ๋: ๋ชจ๋ ์๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ํ๋์ฉ ๋ชจ๋ ์ . ๋จ์ํ ์๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด์ 3์ด ํ๋๋ผ๋ ํฌํจ๋์ด ์๋์ง ํ์ธ -> ์์ ํ์
๋ชจ๋ ๊ฒฝ์ฐ๋ 86,400๊ฐ์ง๋ฐ์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ํ ์๊ฐ ์์ ๋ฌธ์ ํ ์ ์์.
h = int(input())
count = 0
for i in range(h+1):
for j in range(60):
for k in range(60):
# ๋งค ์๊ฐ ์์ '3'์ด ํฌํจ๋์ด ์๋ค๋ฉด ์นด์ดํธ ์ฆ๊ฐ
if '3' in str(i) + str(j) + str(k):
count += 1
print(count)
์์ 3. ์์ค์ ๋์ดํธ
- ๋ด ์ฝ๋: ์ต๋ ์ด๋ ํ์ 8, ์ด๋ ๋ฐฐ์ด ์ ์ -> ๊ฐ๊ฐ x, y๊ฐ์ ๋ํ ํ ์ฃผ์ด์ง ์ขํ๋ฅผ ๋ฒ์ด๋๋ฉด ์ด๋ ์๋ฅผ ๊ฐ์์ํด
p = input()
x = int(p[1])
y = int(ord(p[0]) - ord('a')) + 1
move = [(-2, 1), (-2, -1), (2, 1), (2, -1), (1, -2), (1, 2), (-1, -2), (-1, 2)]
count = 8
for i, j in move:
mx = x - i
my = y - j
if mx < 1 or my < 1 or mx > 8 or my > 8:
count -= 1
print(count)

์ฒ์์ ์๋ ๊ฐ๊ฐ ๋จ์ ์นธ์ ๋ณ์ L, R, U, D๋ฅผ ์ ์ํด์ if๋ฌธ ๋๋ ค์ ํ๋ ค๊ณ ํ์ผ๋,,
์ค์ผ์น ํ ํ ๋ง์ ์ฝ๋ ์ง๋ ค๋ค ๋ณด๋ ์ฝ๋๊ฐ ๋๋ฌด ์ง์ ๋ถํด์ง๊ณ ๋นํจ์จ์ ์ด์ด์ ๋ค์ ๋ฐ๊ฟ
- ๊ต์ฌ ์ฝ๋: ์ด๋ ๋ฐฐ์ด ์ ์ ํ ๊ฐ ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง ํ์ธ
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)]
# 8๊ฐ์ง ๋ฐฉํฅ์ ๋ํ์ฌ ๊ฐ ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง ํ์ธ
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)
๋ด๊ฐ ํผ ์ฝ๋๋ ๋น์ทํ๋ค. ๋๋ ๋์๊ฐ๋ฉด์ ์นด์ดํธ๋ฅผ ๊ฐ์์์ผฐ๊ณ ๊ต์ฌ๋ ๋์๊ฐ๋ฉด์ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํด.
์์ 4. ๊ฒ์ ๊ฐ๋ฐ
# N, M์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถํ์ฌ ์
๋ ฅ๋ฐ๊ธฐ
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)
- ์ ํ์ ์ธ ์๋ฎฌ๋ ์ด์ ๋ฌธ์ -> ๋ณ๋์ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๊ธฐ๋ณด๋ค๋ ๋ฌธ์ ์์ ์๊ตฌํ๋ ๋ด์ฉ์ ์ค๋ฅ์์ด ์ฑ์คํ๊ฒ ๊ตฌํ
- ์ผ๋ฐ์ ์ผ๋ก ๋ฐฉํฅ์ ์ค์ ํด์ ์ด๋ํ๋ ๋ฌธ์ ์ ํ์์๋ dx, dy๋ผ๋ ๋ณ๋์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๋ฐฉํฅ์ ์ ํ๋ ๊ฒ์ด ํจ๊ณผ์
- 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํ ๋๋ ์ปดํ๋ฆฌํจ์ ์ ์ด์ฉํ๋ ๊ฒ์ด ํจ์จ์
- ๋ด ์ฝ๋์ ๋น๊ต: ์ผ์ชฝ์ผ๋ก ํ์ ํ๋ ๋ถ๋ถ์ ํจ์๋ก ์ฒ๋ฆฌํจ.
ํ์ ํด์ ์ ์งํ๋ ๋ถ๋ถ ๋ฐฉํฅ ๋ณ์๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ... + ํ์ ํ์ ๋ณ์ ์ฌ์ฉ
(๋ฐฉํฅ ๋ฆฌ์คํธ๋ฅผ 0, 1, 2, 3 ์์๋ก ๋ง๋ฆ.
๋๋ for๋ฌธ์ผ๋ก ํ์ ->์ ์งํด์ ํ์ ๋ฐฉํฅ์ผ๋ก ๋ง๋ฆ.)

'๐ค > ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Sorting Algorithm) (0) | 2022.02.04 |
|---|---|
| DFS / BFS (๊น์ด์ฐ์ ํ์ / ๋๋น์ฐ์ ํ์) (0) | 2022.01.28 |
| ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (Greedy Algorithm) (0) | 2021.09.23 |
| Selection Sort, Merge Sort ์ ํ์ฑ ๋ฐ ์๊ฐ๋ณต์ก๋ ์ฆ๋ช (0) | 2021.09.17 |
| Counting Sort (๊ณ์ ์ ๋ ฌ) (0) | 2021.09.10 |