어디까지 갈 수 있을까?

chapter 4. 구현 본문

알고리즘/이것이취업을위한코딩테스트다

chapter 4. 구현

_Min 2021. 2. 13. 00:06

책에서는 완전 탐색, 시뮬레이션 유형을 모두 구현이라고 한다

완전 탐색은 모든 경우의 수를 모두 다 계산하는 법이고, 시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 것이다.

 

 

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=11
 
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>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=11
#L R U D
direction=['L','R','U','D']
dx=[00-11]
dy=[-1 ,100]
 
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>or nx<1 or ny>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=[(21),(2-1),(12),(-12),
           (-21),(-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=[-1010]
db=[010-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