어디까지 갈 수 있을까?
chapter 4. 구현 본문
책에서는 완전 탐색, 시뮬레이션 유형을 모두 구현이라고 한다
완전 탐색은 모든 경우의 수를 모두 다 계산하는 법이고, 시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 것이다.
1. 상하좌우
①
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import sys
input=sys.stdin.readline
n=int(input())
arr=list(input().split())
x ,y=1, 1
for a in arr:
past_x, past_y=x, y
if a=='R':
y+=1
elif a=='U':
x-=1
elif a=='D':
x+=1
elif a=='L':
y-=1
if x<1 or x>n or y<1 or y>n:
x, y = past_x, past_y
print(x, y)
|
cs |
②
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import sys
input=sys.stdin.readline
n=int(input())
di_list=list(input().split())
x, y=1, 1
#L R U D
direction=['L','R','U','D']
dx=[0, 0, -1, 1]
dy=[-1 ,1, 0, 0]
for i in di_list:
for j in range(len(direction)):
if i==direction[j]:
nx=x+dx[j]
ny=y+dy[j]
break
#공간 밖 벗어나는 경우 무시
if nx>n or nx<1 or ny>n or ny<1:
continue
#이동수행
x=nx
y=ny
print(x, y)
|
cs |
2. 시각
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import sys
input=sys.stdin.readline
#00시 00분 00초부터 N시 59분 59초까지의
# 모든 시각 중에서 3이 하나라도 포함되 모든 경우의 수
n=int(input())
result=0
k=0
if 3<=n<13:
k=1
elif n<23:
k=2
else:
k=3
result=k*3600
n-=k
result+=(n+1)*1575
print(result)
|
cs |
3. 왕실의 나이트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import sys
input=sys.stdin.readline
n=input()
x=ord(n[0])-96
y=int(n[1])
direction=[(2, 1),(2, -1),(1, 2),(-1, 2),
(-2, 1),(-2, -1),(1, -2),(-1, -2)]
result=0
for di in direction:
nx=x+di[0]
ny=y+di[1]
if 0<nx<9 and 0<ny<9:
result+=1
print(result)
|
cs |
4. 게임개발
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 | import sys input=sys.stdin.readline n, m=map(int, input().split()) #좌표, 바라보는 방향 a, b, d=map(int, input().split()) #북 동 남 서 da=[-1, 0, 1, 0] db=[0, 1, 0, -1] result=1 direction_count=0 #맵 정보 map_a=[] for _ in range(n): map_a.append(list(map(int, input().split()))) #방문한 위치 map_a[a][b]=1 while 1: d -= 1 if d==-1: d=3 na = a + da[d] nb = b + db[d] #가보지 않거나 육지이면 if map_a[na][nb]==0: direction_count=0 result+=1 a, b = na, nb map_a[a][b]=1 else: direction_count+=1 #네 방향 모두 갈 수 없는 경우 if direction_count == 4: na=a-da[d] nb=b-db[d] if map_a[na][nb]==0: direction_count=0 a, b=na, nb else: break print(result) | cs |
게임개발, 왕실의 나이트 같이 방향이 중요한 문제에서는 dx, dy라는 별도의 리스트를 만들어 이동시키는 것이 좋다.
출처 : 이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)
728x90
'알고리즘 > 이것이취업을위한코딩테스트다' 카테고리의 다른 글
chapter 6. 정렬 (0) | 2021.02.15 |
---|---|
DFS/BFS 문제 (0) | 2021.02.15 |
chapter 5. DFS/BFS (0) | 2021.02.13 |
그리디, 구현 문제 (0) | 2021.02.13 |
chapter 3. 그리디 (0) | 2021.02.09 |
Comments