설명
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
입출력 예
n | left | right | result |
---|---|---|---|
3 | 2 | 5 | [3,2,2,3] |
4 | 7 | 14 | [4,3,3,3,4,4,4,4] |
입출력 예 설명
입출력 예#1
주먹구구식
문제에서 나온 방법대로 2차원 배열을 생성한 다음, 각 행을 이어 붙여서
1차원화 한 다음 left ~ right
의 숫자를 담아도 되겠지만,
n
은 무려 10^7
까지 인풋으로 주어집니다.
이 방법으론 시간과 공간 효율성에서 통과하지 못하겠네요.
좌표로 전환해서 생각
문제 설명에서도, gif에서도 보이듯 아시겠지만 좌표 (r, c)
에 들어갈 숫자는 max(r, c) + 1
이 됩니다.
그러면 left ~ right
범위의 숫자를 좌표로 변환만 해주면 문제가 쉽게 해결되겠네요.
결론부터 말씀드리자면
left ~ right
범위의 임의의 숫자 num
에 대해서 좌표 (r, c)
를 구하는 공식은
r = floor(num / n)
c = num % n
입니다.
이제 코드로 구현만 하면 됩니다.
function solution(n, left, right) {
const ans = [];
while (left <= right) {
ans.push(Math.max(Math.floor(left / n), left++ % n) + 1);
}
return ans;
}