Leetcode Java Alphabet Board Path
업데이트:
문제
코드
class Solution {
public String alphabetBoardPath(String target) {
int x = 0;
int y = 0;
StringBuilder sb = new StringBuilder();
for (char c : target.toCharArray()) {
int x1 = (c - 'a') / 5;
int y1 = (c - 'a') % 5;
while (x1 < x) {
x--;
sb.append('U');
}
while (y1 > y) {
y++;
sb.append('R');
}
while (y1 < y) {
y--;
sb.append('L');
}
while (x1 > x) {
x++;
sb.append('D');
}
sb.append('!');
}
return sb.toString();
}
}
결과
설명
- 영문자 구성인 board의 (0, 0)위치에서 시작해서 target 문자열을 만들기 위한 과정을 순차적으로 문자열로 만들어 반환하는 문제이다.
- board는 [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”]로 구성되어있다.
- ‘U’는 위로, ‘D’는 아래로, ‘L’은 좌측으로, ‘R’은 우측으로 이동하는 것을 의미한다.
- ’!’는 이동한 위치의 문자가 target 문자열 생성에 필요한 값임을 의미한다.
- 문제 풀이에 필요한 변수를 정의한다.
- x와 y는 현재 위치값을 의미하며, 처음 위치인 0으로 둘 다 초기화한다.
- sb는 이동 경로에 대한 문자를 동적으로 생성하기 위한 변수로, StringBuilder로 초기화한다.
- target의 각 문자들을 순서대로 c에 넣어 아래를 수행한다.
- x1과 y1은 c의 위치를 저장할 변수로, 문자의 순서인 $c - ‘a’$ 값을 한 행의 문자 갯수인 5로 나눈 몫을 x1에 나머지를 y1에 넣어준다.
- x1이 x보다 작을 때 까지 x를 감소시키고 sb에 ‘U’문자를 이어 위로 이동했음을 표기한다.
- y1이 y보다 클 때 까지 y를 증가시키고 sb에 ‘R’문자를 이어 우측으로 이동했음을 표기한다.
- y1이 y보다 작을 때 까지 y를 감소시키고 sb에 ‘L’문자를 이어 좌측으로 이동했음을 표기한다.
- x1이 x보다 클 때 까지 x를 증가시키며 sb에 ‘D’문자를 이어 아래로 이동했음을 표기한다.
- 목표 위치로 이동이 완료되면 sb에 ‘!’ 문자를 이어 목표 문자로 이동했음을 표기한다.
- 반복이 완료되면 target 문자열을 만들기 위한 과정이 저장된 sb를 문자열로 변환하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기