
완전 탐색 + 시뮬레이션
완전 탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결 방법
시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 방법
여행가 A는 N X N 크기의 정사각형 공간 위에 서 있다.
이 공간은 1 X 1 크기의 정사각형으로 나누어져 있다.
가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다.
여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다.
우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다.
계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있다.
L : 왼쪽으로 한 칸 이동
R : 오른쪽으로 한 칸 이동
U : 위로 한 칸 이동
D : 아래로 한 칸 이동
이때 여행가 A가 N X N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다.
계획서가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.
첫째 줄에 공간의 크기를 나타내는 N이 주어진다. (1 <= N <= 100)
둘째 줄에 여행가 A가 이동할 계획서 내용이 주어진다. (1 <= 이동 횟수 <= 100)
첫째 줄에 여행가 A가 최종적으로 도착할 지점의 좌표 (x, y)를 공백으로 구분하여 출력한다.
5
R R R U D D
3 4
# 공간 크기 입력받기
n = int(input())
move_plans = list(input().split()) # list 함수 굳이 사용 필요 X
# 이동 방향 정의
move_types = ['L', 'R', 'U', 'D']
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
# 출발 위치는 항상 (1, 1)
x, y = 1, 1
# 이동 계획 수행
for move_plan in move_plans:
idx = move_types.index(move_plan) # 문자 인덱스 찾기
nx = x + dx[idx]
ny = y + dy[idx]
# 정사각형을 벗어나는지 확인
if (nx >= 1 and nx <= n and ny >= 1 and ny <= n):
x = nx
y = ny
else:
continue
print(x, y)
👉🏼 공백으로 구분해 여러 개의 입력값을 입력받는 경우는 list로 변환하지 않아도 리스트로 생성된다.
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)
👉🏼 예제 답안 같은 경우는 2중 for문을 사용하였다. plans와 move_types를 반복문으로 리스트 요소를 하나씩 꺼내와 두 개의 요소가 같은지 비교하는 방식을 사용하였고, 나의 풀이는 index 함수를 사용하여 해당 리스트에 특정 값의 인덱스를 찾는 방식을 사용하였다.