본문 바로가기

Algorithm/구현

[이것이 취업을 위한 코딩테스트다] 04. 구현

01. 상하좌우

import sys
input=sys.stdin.readline

n=int(input())
plans=list(input().rstrip().split())
x,y=1,1

move_types=['L','R','U','D']
dx=[0,0,-1,1]
dy=[-1,1,0,0]

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 nx>n or ny<1 or ny>n:
        continue
    x=nx
    y=ny
        
print(x,y)

 

02. 시각

import sys
input=sys.stdin.readline

n=int(input())
cnt=0
for i in range(0,n+1):
    for j in range(0,60):
        for k in range(0,60):
            if '3' in str(i) or '3' in str(j) or '3' in str(k):
                cnt+=1
print(cnt)

 

03. 왕실의 나이트

import sys
input=sys.stdin.readline

current=input().rstrip()
dx=[-1,-1,1,1,-2,-2,2,2]
dy=[-2,2,-2,2,-1,1,-1,1]
cnt=0

for i in range(8):
    nx=ord(current[0])-97+dx[i]
    ny=int(current[1])-1+dy[i]
    if nx<0 or nx>=8 or ny<0 or ny>=8:
        continue
    cnt+=1
    
print(cnt)

 

04. 게임 개발

import sys
input=sys.stdin.readline
        
n,m=map(int,input().split())
x,y,direction=map(int,input().split())
game_map=list(list(map(int,input().split())) for _ in range(n))
visited=[[0]*m for _ in range(n)]
visited[x][y]=1 

dx=[-1,0,1,0]
dy=[0,1,0,-1] # 북,동,남,서 방향 정의

# 왼쪽으로 회전
def turn_left():
    global direction
    direction-=1
    if direction==-1:
        direction=3

# 시뮬레이션 시작
count=1 # 방문한 칸의 수
turn_time=0 # 내가 현재 위차한 곳에서 방문할 수 없는 수
while True:
    turn_left()
    nx=x+dx[direction]
    ny=y+dy[direction]
    if visited[nx][ny]==0 and game_map[nx][ny]==0:
        visited[nx][ny]=1
        x=nx
        y=ny
        count+=1
        turn_time=0
        continue
    else:
        turn_time+=1
    # 네 방향 모두 갈 수 없는 경우
    if turn_time==4:
        nx=x-dx[direction]
        ny=y-dy[direction]
        if game_map[ny][nx]==0:
            x=nx
            y=ny
        else:
            break
        turn_time=0
        
print(count)