컴공생의 다이어리
상하좌우 본문
여행가 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를 만나면 무시된다.
질문
계획서가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.
코드로 구현
아래는 파이썬으로 구현한 코드이다.
# L : 왼쪽으로 한 칸 이동
# R : 오른쪽으로 한 칸 이동
# U : 위로 한 칸 이동
# D : 아래로 한 칸 이동
n = int(input())
x, y = 1, 1
plans = input().split()
# L, R, U, D에 따른 이동 방향
move_info = {'L': [0, -1], 'R': [0, 1], 'U': [-1, 0], 'D': [1, 0]}
for plan in plans:
nx = x + move_info[plan][0]
ny = y + move_info[plan][1]
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
x, y = nx, ny
print(x, y)
아래는 c/c++으로 구현한 코드이다.
#include<iostream>
#include<string>
int main() {
int N;
int x = 1, y = 1;
std::string D;
std::cin >> N;
std::cin.ignore();
getline(std::cin, D);
for (int i = 0; i < D.length(); i++) {
if (D[i] == ' ') continue;
if (D[i] == 'L' && y != 1)
y -= 1;
else if (D[i] == 'R' && y != N)
y += 1;
else if (D[i] == 'U' && x != 1)
x -= 1;
else if (D[i] == 'D' && x != N)
x += 1;
}
std::cout << x << " " << y;
return 0;
}
www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162243077
728x90
'Development > Algorithm & Coding Test' 카테고리의 다른 글
왕실의 나이트 (0) | 2020.12.21 |
---|---|
시각 (0) | 2020.12.21 |
[프로그래머스] Greedy - 체육복 (0) | 2020.12.18 |
볼링공 고르기 (0) | 2020.12.18 |
만들 수 없는 금액 (0) | 2020.12.18 |
Comments