728x90
반응형
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 4장 구현(Implementation), 시뮬레이션(simulation) 유형의 상하좌우 문제는 여행가의 이동 계획서와 정사각형 공간의 크기가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 구하는 문제이다.
이코테 4장 구현 상하좌우 문제 정보
출처
- [한빛미디어] 이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)
- https://youtu.be/2zjoKjt97vQ
알고리즘 분류
- 구현, 시뮬레이션 (Implementation, simulation algorithm)
상하좌우 문제 요약
- 여행가 A가 NxN 크기의 정사각형 공간 위에 서 있고 공간은 1x1 크기의 정사각형으로 나누어져 있다.
- 가장 왼쪽 위 좌표는 (1, 1), 가장 오른쪽 아래 좌표는 (N, N)이다.
- 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있고, 시작 좌표는 항상 (1, 1)이다.
- 여행가 A가 이동할 계획서에는 하나의 줄에 띄어쓰기를 기준으로 L, R, U, D 중 하나의 문자가 반복적으로 적혀있다.
- 각 문자의 의미는 다음과 같다.
- L: 왼쪽으로 한 칸 이동
- R: 오른쪽으로 한 칸 이동
- U: 위로 한 칸 이동
- D: 아래로 한 칸 이동
- 이때 여행가 A가 NxN 크기의 정사각형 공간을 벗어나는 움직임은 무시된다.
- 첫째 줄에는 공간의 크기 N(1 ≤ N ≤ 100)이 주어진다.
- 둘째 줄에는 여행가 A가 이동할 계획서 내용이 주어진다. (1 ≤ 이동 횟수 ≤ 100)
- 여행가 A가 최종적으로 도착할 지점의 좌표(X, Y)를 공백 기준으로 구분하여 출력한다.
문제 풀이 과정
- 공간의 크기 N과 이동할 계획서 내용을 입력받는다.
- 키 값이 방향(U, D, L, R)이고, 값이 이동하는 좌표인 딕셔너리를 정의한다.
- 현재 위치 좌표로 구성된 리스트를 정의한다.
- 이동 계획서를 한 문자씩 탐색하여 다음 위치 좌표를 저장해둔다.
- 다음 위치 좌표가 공간을 벗어나지 않는다면 현재 위치를 다음 위치로 바꾸고(이동), 벗어난다면 무시한다.
- 이동 계획서의 문자를 모두 탐색하며 4~5번 과정을 반복한다.
- 현재 위치 좌표를 공백 기준으로 구분하여 출력한다.
코드 및 설명
- N - 공간의 크기
- direction - 키가 방향, 값이 이동하는 좌표로 구성된 딕셔너리
- position - 현재 위치 좌표로 구성된 리스트
- plan - 여행가 A가 이동할 계획서 내용(L, R, U, D 중 하나의 문자)으로 구성된 리스트
- p - 현재 이동할 문자
- nextX - 이동할 다음 위치의 x 좌표
- nextY - 이동할 다음 위치의 y 좌표
N = int(input())
plan = list(map(str, input().split()))
direction = {
'R': (0, 1),
'L': (0, -1),
'U': (-1, 0),
'D': (1, 0)
}
position = [1, 1]
for p in plan:
nextX = position[0] + direction[p][0]
nextY = position[1] + direction[p][1]
if 0 < nextX <= N and 0 < nextY <= N: # 공간을 벗어나지 않을 때
position = [nextX, nextY] # 이동하기
print(position[0], position[1])
현재 위치 좌표를 굳이 리스트로 두지 않고, int형 변수로 두면 메모리를 더 줄일 수 있을 것 같다.
시뮬레이션, 완전 탐색 문제에서는 방향벡터가 자주 활용되므로 익숙해지도록 해야겠다.
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 4장 구현(Implementation), 시뮬레이션(simulation) 유형의 상하좌우 문제를 파이썬 python으로 풀어보았다.
728x90
반응형
'Algorithm Problem Solving > 이코테 (나동빈 저)' 카테고리의 다른 글
[구현/시뮬레이션] 이코테 왕실의 나이트 (Python / 파이썬) (0) | 2022.06.05 |
---|---|
[구현/완전 탐색/브루트포스] 이코테 시각(Python / 파이썬) (0) | 2022.06.04 |
[그리디/Greedy] 이코테 곱하기 혹은 더하기 (Python / 파이썬) (0) | 2022.06.04 |
[그리디/Greedy] 이코테 1이 될 때까지 (Python / 파이썬) (0) | 2022.06.03 |
[그리디/Greedy] 이코테 거스름 돈 문제 (Python / 파이썬) (0) | 2022.06.03 |
댓글