이것이 코딩테스트다 예제 4-1 상하좌우 문제
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- A가 최종적으로 도착할 지점의 좌표를 구하라 - 주어진 자료는 무엇인가?
- N : 공간의 크기를 나타냄
- move : 이동할 계획서가 담긴 배열 - 조건은 무엇인가?
- N x N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다.
2. 계획
- 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
- A의 처음 시작 지점을 start = [1,1]이라고 정한다.
- move 배열을 순회하면서
- 문자열이 'L'인 경우
start[1]이 1일때 그대로 start[1]
start[1] -1을 한다. - 문자열이 'R'인 경우
start[1]이 N일때 그대로 start[1]
start[1] + 1을 한다. - 문자열이 'U'인 경우
start[0]이 1일때 그대로 start[0]
start[0] -1을 한다. - 문자열이 'D'인 경우
start[0]이 N일때 그대로 start[0]
start[0] + 1을 한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (N, move) => {
// A의 처음 시작 지점을 start = [1, 1]이라고 정한다.
let start = [1, 1];
// move 배열을 순회하면서
// 문자열이 'L'인 경우
// start[1]이 1일때 그대로 start[1]
// start[1] - 1을 한다.
// 문자열이 'R'인 경우
// start[1]이 N일때 그대로 start[1]
// start[1] + 1을 한다.
// 문자열이 'U'인 경우
// start[0]이 1일때 그대로 start[0]
// start[0] - 1을 한다.
// 문자열이 'D'인 경우
// start[0]이 N일때 그대로 start[0]
// start[0] + 1을 한다.
for (i = 0; i < move.length; i++) {
if (move[i] === 'L') {
if (start[1] === 1) {
start[1] = start[1]
} else {
start[1] = start[1] - 1;
}
}
if (move[i] === 'R') {
if (start[1] === N) {
start[1] = start[1]
} else {
start[1] = start[1] + 1;
}
}
if (move[i] === 'U') {
if (start[0] === 1) {
start[0] = start[0]
} else {
start[0] = start[0] - 1;
}
}
if (move[i] === 'D') {
if (start[0] === N) {
start[0] = start[0]
} else {
start[0] = start[0] + 1;
}
}
}
return start
};
test('coordinate', () => {
expect(solution(5, ['R', 'R', 'R', 'U', 'D', 'D'])).toEqual([3, 4]);
});
'코테연습' 카테고리의 다른 글
97. 이것이 코딩 테스트다 6장 : 위에서 아래로 Javascript (0) | 2022.09.01 |
---|---|
96. 이것이 코딩 테스트다 4장 : 왕실의 나이트 Javascript (0) | 2022.08.30 |
93. 배열에 중복된 요소가 있는지 확인하기 Javascript (0) | 2022.08.25 |
92. 배열에서 각 요소 개수 세기 Javascript (0) | 2022.08.24 |
91. [1차] 뉴스 클러스터링 Javascript (0) | 2022.08.23 |
댓글