티스토리 뷰
📌구현
완전 탐색: 모든 경우의 수를 주저 없이 다 계산하는 해결 방법
시뮬레이션: 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야 하는 유형
📌문제
예제 4-1 상하좌우
여행가 A는 N x N 크기의 정사각형 공간 위에 서 있다. 이 공간은 1 x 1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위의 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다. 여행가는 상(U), 하(D), 좌(L), 우(R) 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다. L, R, U, D로 이루어진 문자들이 적혀진 계획서를 보고 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.
(단, N x N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다.)
📌풀이
연산 횟수는 이동횟수에 비례
따라서 이동 횟수가 N번인 경우 시간 복잡도는 O(N)
📌코드
n = int(input())
plans = input().split()
x, y = 1, 1
# 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)
주의: 처음엔 단순히 x, y 좌표를 생각하고 L(좌), R(우)로 움직이면 x좌표가 변하고, U(위), D(아래)로 움직이면 y좌표가 변한다고 착각했다. 하지만 이 문제에서는 L(좌), R(우)로 움직이면 y값이 변하고, U(위), D(아래)로 움직이면 x값이 변하는 행과 열의 관계임을 주의해야 한다.
📌참고
'코딩테스트' 카테고리의 다른 글
왕실의 나이트 (4) | 2024.10.06 |
---|---|
시각 (2) | 2024.10.05 |
숫자 카드 게임, 1이 될 때까지 (4) | 2024.10.02 |
큰 수의 법칙 (3) | 2024.10.01 |
Chapter 3. 그리디 알고리즘, 거스름돈 문제 (6) | 2024.09.30 |