문제 설명
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
- n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
- i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
- 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
- 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 107
- 0 ≤ left ≤ right < n2
- right - left < 105
입출력 예
n | left | right | result |
3 | 2 | 5 | [3,2,2,3] |
4 | 7 | 14 | [4,3,3,3,4,4,4,4] |
나의 풀이
function solution(n, left, right) {
let answer = [];
for (let i = left; i <= right; i++) {
let x = parseInt(i / n) + 1;
let y = parseInt(i % n) + 1;
if (x === y) {
answer.push(x);
} else if (x > y) answer.push(x);
else answer.push(y);
}
return answer;
}
n = 3, left = 2, right = 5 인 경우를 예제로 설명하겠다.
위는 문제에서 1.n행 n열 크기의 비어있는 2차원 배열을 만듭니다. 를 행했을때 만들어지는 2차원 배열이다.
이는 2차원 배열에서의 좌표를 나타낸다.
위는 3. 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다. 에서 생성된 배열의 모습이다.
그 중 밑의 배열은 2차원 배열에서의 좌표를 나타낸다.
우리는 위와같이 생성된 1차원 배열 arr에서 arr[left], arr[left+1], ..., arr[right] 값을 구해야한다. arr에서 각각 자리에 해당하는 값을 알아내려면 해당 자리의 우선 좌표값을 알아내야 한다. 또한 배열 arr에서 left~right 범위만 탐색하면 되므로
for (let i = left; i <= right; i++)
for문에서 조건은 변수 i에 대한 조건은 위 코드와 같다.
arr[i]의 값을 알아내려면 먼저 2차원 배열에서의 좌표값을 알아내야 한다.
좌표값을 (x,y)라고 할 경우,
x = i / n + 1
y = i%n + 1
인 규칙을 가지고 있다. 규칙을 찾아내는 방법은 그냥 냅다 써보면 안다.
i = 0, 1, 2 → x = 1
i = 3, 4, 5 → x = 2
i = 6, 7, 8 → x = 3
i = 0, 3, 6 → y = 1
i = 1, 4, 7 → y = 2
i = 2,, 5, 8 → y = 3
위와 같이 좌표값 규칙을 찾아내면, 이제 해당 좌표에 담긴 값을 알아내야 한다.
좌표에 담기게 되는 값도 좌표값에 따라 규칙을 가지게 된다.
규칙은 다음과 같다.
- 좌표 (x,y)에서 x === y 인 경우 해당 좌표에 담긴 값은 x(=y)이다.
- 좌표 (x,y)에서 x < y 인 경우 (예: (1,2) = 2 , (1,3) = 3 )는 해당 좌표의 값은 y이다.
- 좌표 (x,y)에서 x > y 인 경우 (예: (2,1) = 2 , (3,2) = 3 )는 해당 좌표의 값은 x이다.
위의 규칙대로 코드를 짜면 이와 같다.
if (x === y) {
answer.push(x);
} else if (x > y) answer.push(x);
else answer.push(y);
설명한대로 규칙을 찾아내면 언급한 풀이대로 코드를 작성할 수 있다.
'자료구조 & 알고리즘' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - 롤케이크 자르기 ( 자바스크립트 풀이 ) (1) | 2024.02.03 |
---|---|
[코딩테스트 - 해시] 프로그래머스 - 전화번호 목록 ( 자바스크립트 풀이 ) Map 사용 (3) | 2024.01.31 |
[코딩테스트] 프로그래머스 - 피보나치 수(자바스크립트 풀이) (0) | 2023.12.29 |
[알고리즘] BFS 너비 우선 탐색 - 자바스크립트 코드 포함 간략한 설명 (0) | 2023.11.14 |
[자료구조] 트리 Tree - 자바스크립트(Javascript)로 구현하기 (0) | 2023.09.04 |