문제 설명
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
- n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
- i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
- 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
- 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] |
입출력 예
입출력 예 #1
- 다음 애니메이션은 주어진 과정대로 1차원 배열을 만드는 과정을 나타낸 것입니다.
입출력 예 #2
- 다음 애니메이션은 주어진 과정대로 1차원 배열을 만드는 과정을 나타낸 것입니다.
나만의 풀이
이 문제는 처음에 모든 값을 배열로 push 하고 문제를 풀었는데 런타임 에러가 발생했다. 그래서 생각해 보니 원하는 값만 도출하면 되는 문제라 반복문의 범위를 시작은 left, 끝은 right으로 해서 코드를 구성해 봤다.
간단하게 설명하면 위의 그림처럼 행의 시작은 행의 index와 같다. 그리고 행의 index 보다 작으면 index 값으로 반환하면 된다
그래서 우리가 필요한 것은 행의 index와 1~n까지의 수만 있으면 된다. 그리고 위의 조건을 삼항 연산자로 조건을 걸면 끝!
function solution(n, left, right) {
const answer = [];
for (let i = left; i <= right; i++) {
const num1 = Math.ceil((i+1) / n);
const num2 = i % n + 1;
answer.push(num1 >= num2 ? num1 : num2);
}
return answer;
}
'프로그래머스 JS LV2' 카테고리의 다른 글
LV2 23 기능개발 (0) | 2023.03.23 |
---|---|
LV2 22 연속 부분 수열 합의 개수 (0) | 2023.03.23 |
LV2 20 튜플 (0) | 2023.03.20 |
LV2 19 행렬의 곱셈 (0) | 2023.03.16 |
LV2 18 귤 고르기 (0) | 2023.02.24 |