본문 바로가기
ALGORITHM/이코테

[ALGORITHM] 4. 구현

by 뭉망뭉 2022. 2. 28.

이것이 취업을 위한 코딩테스트다 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

댓글