본문 바로가기
프로그래머스,백준/알고리즘

[이것이 코딩 테스트다 with Python] 구현 - 상하좌우 (Python)

by z.1nee 2020. 10. 31.
SMALL
더보기

이 글은 이것이 취업을 위한 코딩테스트다 책을 기반으로 쓰여진 글입니다.
출처 : 이것이 취업을 위한 코딩테스트다

 


문제 

  • 여행가 A는 N × N 크기의 정사각형 공간 위에 서 있다. 이 공간은 1 × 1 크기의 정사각형으로 나누어져 있다.
    가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다.
    여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다. 우리 앞에는 여행가 A가
    이동할 계획이 적힌 계획서가 놓여 있다

  • 계획서에는 하나의 줄에 띄어쓰기를 기준으로 L, R, U, D 중 하나의 문자가 반복적으로 적혀있다.
    각 문자의 의미는 다음과 같다

    • L: 왼쪽으로 한 칸 이동
    • R: 오른쪽으로 한 칸 이동
    • U: 위로 한 칸 이동
    • D: 아래로 한 칸 이동
  • 이때 여행가 A가 N × N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다
    예를 들어 (1, 1)의 위치에서 L 혹은 U를 만나면 무시된다
    다음은 N = 5인 지도와 계획이다

 


 

알고리즘

1. type 리스트에 L,R,U,D 를 넣어놓음

2. 계획서 리스트 전체를 반복하며 L,R,U,D에 따라 x,y 좌표를 변경해줌

3. x,y가 L,R,U,D에 의하여 1보다 작아지거나 N보다 커지는 경우에는 continue로 값이 변경되지 않게함 (맵 밖으로 벗어나지 않게함)

4. 최종 x,y 출력

 

 

 

내 소스 코드

N = int(input())
plan = input().split()
x, y = 1, 1

type = ['L','R','U','D']

for i in range(len(plan)):
    if plan[i] == type[0]:
        if y -1 == 0:
            continue
        else:
            y = y - 1
    if plan[i] == type[1]:
        if y + 1 == N+1:
            continue
        else:
            y = y + 1
    if plan[i] == type[2]:
        if x- 1 == 0:
            continue
        else:
            x = x - 1
    if plan[i] == type[3]:
        if x + 1 == N+1:
            continue
        else:
            x = x + 1

print(x, y)

 

결과 

 

 

책  소스 코드

# 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)

 

 

 

 

 

댓글