상하좌우 (구현 알고리즘)
상하좌우 (구현 알고리즘)
[문제1] 상하좌우#
[문제] 상하좌우 : 문제 설명#
여행가 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인 지도와 계획이다
[문제] 조건#
조건 풀이시간 15분 시간제한 1초, 메모리 128mb
입력 첫째 줄에 공간의 크기를 나타내는 N이 주어집니다. (1<=N<=100) 둘째 줄에 여행가 A가 이동할 계획서 내용이 주어집니다. (1<=이동 횟수<=100)
출력 첫째 줄에 여행가 A가 최종적으로 도착할 지점의 좌표(X,Y)를 공백으로 구분하여 출력한다.
입력예시 5 R R R U D D 출력예시 3 4
up-down-left-right1.py#
n = int(input()) # map의 최대 크기
m = list(map(str, input().split())) #공백으로 구분된 이동플랜
x, y = 1, 1 # 시작위치
for move in m: # 입력받은 이동 커맨드
if (move == "U") and (x - 1) > 0: # U (x-1, y)를 x-1이 1보다 작아지지 않는 선에서 수행
x -= 1
elif (move == "D") and (x + 1) <= n : # D (x+1, y)를 x+1이 n보다 커지지 않는 선에서 수행
x += 1
elif (move == "L") and (y - 1) > 0: # L (x, y-1)를 y-1이 1보다 작아지지 않는 선에서 수행
y -= 1
elif (move) == "R") and (y + 1) <= n : # R (x, y+1)를 y+1이 n보다 커지지 않는 선에서 수행
y += 1
print(x,' ',y)
up-down-left-right1.py#
n = int(input())
m = input().split()
x, y = 1, 1
move_type = ['U','D','L','R']
dx = [-1, +1, 0, 0]
dy = [0, 0, -1, +1]
for move in m:
for i in range(0, len(move_type)) :
if move == move_type[i] :
if( 1 <= x+dx[i] <= n and 1 <= y+dy[i] <= n ) :
x += dx[i]
y += dy[i]
print(x,' ',y)
이 자료는 나동빈님의 이코테 저서를 보고 정리한 자료입니다.