참고 교재

이것이 코딩테스트다 with 파이썬 (나동빈, 2021)

예제 1 - 상하좌우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
n = int(input())
commands = input().split()

cmd_map = {
'L': (0, -1),
'R': (0, 1),
'U': (-1, 0),
'D': (1, 0)
}

current = [1, 1]

for command in commands:
gy, gx = cmd_map[command]
cy, cx = current
ny, nx = cy + gy, cx + gx

if nx < 1 or nx > n or ny < 1 or ny > n:
continue
else:
current[0] = ny
current[1] = nx

print(f'{current[0]} {current[1]}')

예제 2 - 시각

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
n = int(input())
unit = 1575

if n >= 23:
m = 3
elif n >= 13:
m = 2
elif n >= 3:
m = 1
else:
m = 0

n -= m

result = (n + 1) * unit
result += m * 3600

print(result)

위 코드는 개선 사항으로 깃허브 이슈에 제보함

실전문제 1 - 왕실의 나이트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
x, y = list(input())

y = int(y) - 1
x = ord(x) - 97

dim = [
(2, 1),
(2, -1),
(-2, 1),
(-2, -1),
(1, 2),
(1, -2),
(-1, 2),
(-1, -2)
]

count = 0

for d in dim:
nx, ny = x + d[0], y + d[1]

if nx < 0 or nx > 7 or ny < 0 or ny > 7:
continue
else:
count += 1

print(count)

실전문제 2 - 게임 개발

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
n, m = map(int, input().split())
a, b, d = map(int, input().split())
matrix = []

ngo = [(0, -1), (1, 0), (0, 1), (-1, 0)]

nback = [(0, 1), (-1, 0), (0, -1), (1, 0)]

for i in range(m):
matrix.append(list(map(int, input().split())))

count = 1 # 얼마나 이동했는지 카운트
turned = 0 # 몇번 돌았는지 카운트

matrix[a][b] = 2

while True:
# 만약 4번 돌았을 경우
if turned == 4:
turned = 0
# 뒤로가는 경우를 고려
by, bx = a + nback[d][0], b + nback[d][1]
# 바다인 경우
if matrix[by][bx] == 1:
break # 종료
else:
a = by
b = bx
turned = 0
count += 1
else:
# 왼쪽으로 돌아 전진하는 경우 고려
ny, nx = a + ngo[d][0], b + ngo[d][1]
# 바다이거나 이미 방문한 경우
if matrix[ny][nx] == 1 or matrix[ny][nx] == 2:
turned += 1
d = (d + 1) % 4
continue
else:
a = ny
b = nx
matrix[ny][nx] = 2
turned = 0
d = (d + 1) % 4
count += 1

print(count)