[이코테-구현-예제] 상하좌우 (Java)

Alex Moon·2023년 8월 8일
0

알고리즘

목록 보기
14/27

제한 조건

  • 풀이 시간 : 15분
  • 시간 제한 : 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인 지도와 계획이다.

이 경우 6개의 명령에 따라서 여행가가 움직이게 되는 위치는 순서대로 (1, 2), (1, 3), (1, 4), (1, 4), (2, 4), (3, 4)이므로, 최종적으로 여행가 A가 도착하게 되는 곳의 좌표는 (3, 4)이다. 다시 말해 3행 4열의 위치에 해당하므로 (3, 4)라고 적는다. 계획서가 주어졌을 때, 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.

입력

  • 첫째 줄에 공간의 크기를 나타내는 N이 주어집니다. (1 <= N <= 100)
  • 둘째 줄에 여행가 A가 이동할 계획서 내용이 주어집니다. (1 <= 이동 횟수 <= 100)

출력

  • 첫째 줄에 여행가 A가 최종적으로 도착할 지점의 좌표 (X, Y)를 공백으로 구분하여 출력한다.

입력 예시

입력출력
5
R R R U D D
3 4

풀이

이 문제에서의 포인트는 3가지다.

  1. (y, x) 좌표 구성
  2. y에서 down 이동이 +1 이동
  3. 정사각형 공간의 지도

위 포인트를 생각하며 좌표 객체를 만들면 간단하게 해결할 수 있다.

좌표 객체는 x, y와 matrixSize를 가진다. 그리고 setter를 통해서 좌표 이동을 하도록 한다. setter는 matrixSize를 충족할 때만 set되도록 한다.

solution 메서드에서는 switch-case 구문을 이용해 L/R/U/D에 해당하는 이동을 지정해주면 끝난다.

이슈

풀이가 간단하다고 생각해서 문제가 제시하는 3가지 중요한 조건들을 제대로 파악하지 않고 코드를 작성하려고 했다. 결국 간단한 풀이임에도 불구하고 코드를 작성하는데 실패했다.

또한 작성한 코드를 리팩토링하기 전에는 solution 메서드에 moveX, moveY 메서드를 정의하여 setter가 있음에도 중복된 메서드를 만들었다. 풀이하며 객체를 정의하게 되는 경우에는 어떤 역할을 하는 객체인지 명확하게 정의하고, 해당 객체가 단일 책임(SRP)을 가지도록 하여 의존성이 발생하지 않도록 하자.

코딩 테스트 문제를 풀 때 가장 중요한 것은 문제를 빨리 푸는 것이 아니라 문제를 잘 읽고 정확한 결과를 내는 것을 명심하자.

코드

profile
느리더라도 하나씩 천천히. 하지만 꾸준히

0개의 댓글