https://school.programmers.co.kr/learn/courses/30/lessons/87390?language=javascript
function solution(n, left, right) {
var answer = [];
for(let i = left; i<=right; i++){
x = Math.floor(i/n);
y = i % n;
if(x > y){
answer.push(x+1);
}
else
answer.push(y+1);
}
return answer;
}
이 문제는 규칙을 찾는 게 중요하다.
문제가 주어진대로 구현을 진행해도 되지만 그렇게 되면 코드의 길이가 너무 길어지고 시간초가가 발생한다.
규칙을 보려면 배열의 인덱스를 값에 맞게 적어봐야 한다.
n이 3일 경우의 예시이다.
배열을 첫 번째 규칙처럼 만든 다음 펼친 모습은 다음과 같다. (인덱스, (행, 열), 값)
0 (0, 0) 1 | 1 (0, 1) 2 | 2 (0, 2) 3 | 3 (1, 0) 2 | 4 (1, 1) 2 | 5 (1, 2) 3 | 6 (2, 0) 3 | 7 (2, 1) 3 | 8 (2, 2) 3 |
규칙을 찾으면 (인덱스 // n , 인덱스 % n)(몫, 나머지)의 큰 값에서 + 1 한 값과 같다.
예를 들면 인덱스가 7이면 (7 // 3, 7 % 3) => (2, 1) 여기서 큰 값에 + 1 하면 3이 된다.
규칙을 잘 찾자.
'코딩테스트 연습 > Array' 카테고리의 다른 글
[Programmers] 방문길이 (1) | 2024.10.09 |
---|