이것이 취업을 위한 코딩테스트다 python 문제 풀이
4-1. 상하좌우
내 풀이
# C4. 구현 - '상하좌우'
import sys
put = sys.stdin.readline
n = int(put())
plan = list(put().split())
x=1
y=1
for i in plan:
if i=='R':
if x==n: continue
else: x+=1
elif i=='L':
if x==1: continue
else: x-=1
elif i=='U':
if y==1: continue
else: y-=1
elif i=='D':
if y==n: continue
else: y+=1
print(y, x)
책 풀이
# 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. 시각
# C4. 구현 - '시각'
import sys
put = sys.stdin.readline
n = int(put())
count = 0
for h in range(n+1):
for m in range(60):
for s in range(60):
if '3' in str(h) + str(m) + str(s):
count+=1
print(count)
4-3. 왕실의 나이트
# C4. 구현 - 실전문제 '왕실의 나이트'
import sys
put = sys.stdin.readline
n = list(put())
a = ord(n[0]) - ord('a') + 1
b = int(n[1])
count=0
steps = [
(2,1), (2,-1), (-2,1), (-2,-1),
(1,2), (1,-2), (-1,2), (-1,-2)
]
for step in steps:
x = a+step[0]
y = b+step[1]
if x<1 or y<1 or x>8 or y>8:
continue
else: count+=1
print(count)
4-4. 게임 개발
# C4. 구현 - 실전문제 '게임 개발'
import sys
put = sys.stdin.readline
n, m = map(int, put().split())
a, b, d = map(int, put().split())
stepX = [0, 1, 0, -1] #북 동 남 서
stepY = [-1, 0, 1, 0] #북 동 남 서
maps = []
for i in range(n):
maps.append(list(map(int, put().split())))
maps[a][b] = 1 #현재위치. 방문해서 1
go=1 #방문 횟수. 현재 칸부터 방문한 거로 침.
turn=0 #회전 횟수
while True:
#방향 전환. 현재방향 기준 왼쪽으로.
d-=1
if d==-1: d=3 #북쪽 보면 서쪽으로
# # 서쪽 안 갔으면 서쪽으로 감 = map[b][a-1]
# # 북으로 map[b+1][a]
# # 동으로 map[b][a+1]
# # 남으로 map[b-1][a]
#a, b 좌표 바뀌는 걸 x, y에 저장
x = a + stepX[d]
y = b + stepY[d]
#방향 전환 후 그 방향에(정면에) 가보지 않은 칸 존재하면 전진
if maps[x][y] == 0: #안 가봤거나 바다가 아님
maps[x][y] = 1 #가봤음 표시
#현재 좌표로 바꿔줌
a=x
b=y
go += 1
turn = 0
continue
else: #아니면 회전
turn += 1
#네 방향 다 가봤으면 한 칸 뒤로 감
if turn == 4:
#기존에 step은 한 칸 앞으로 갔는데 -1 곱하면 한 칸 뒤로 감
x = a - stepX[d]
y = b - stepY[d]
if maps[x][y] == 0:
a=x
b=y
else: break #바다라서 뒤로 못 가면 움직임 멈춤
turn = 0 #회전 횟수 초기화
print(go)
'ALGORITHM > 이코테' 카테고리의 다른 글
[ALGORITHM] 8. 다이나믹 프로그래밍 (0) | 2022.03.06 |
---|---|
[ALGORITHM] 7. 이진 탐색 (0) | 2022.03.05 |
[ALGORITHM] 6. 정렬 (0) | 2022.03.04 |
[ALGORITHM] 5. DFS/BFS (0) | 2022.03.01 |
[ALGORITHM] 3. 그리디 (0) | 2022.02.27 |
댓글