728x90
코드 힌트
0 번째 | 1 번째 | 2 번째 | 3 번째 | 4 번째 | 5 번째 | |
0 번째 | 1 | 2 | 3 | 4 | 5 | 6 |
1 번째 | 2 | 2 | 3 | 4 | 5 | 6 |
2 번째 | 3 | 3 | 3 | 4 | 5 | 6 |
3 번째 | 4 | 4 | 4 | 4 | 5 | 6 |
4 번째 | 5 | 5 | 5 | 5 | 5 | 6 |
5 번째 | 6 | 6 | 6 | 6 | 6 | 6 |
- 1차원 배열로 2차원 배열 접근하기
- 주어진 문제는 실제로 2차원 배열처럼 보이지만, 이를 1차원 배열로 접근할 수 있습니다.
- 2차원 배열의 인덱스를 1차원 배열로 변환할 때, i / n은 행(row)을 나타내고, i % n은 열(col)을 나타냅니다.
- 예를 들어, n = 3일 때, i = 4인 경우 (4 / 3)은 행(1), (4 % 3)은 열(1)이 됩니다.
- 규칙 찾기
- 2차원 배열에서 각 위치 (row, col)의 값은 Math.max(row, col) + 1로 결정됩니다.
- 이 규칙을 통해, 1차원 배열의 각 위치에 대해 계산된 값을 result 배열에 채워넣습니다.
- 계산 예시
- 만약 n = 4, left = 7, right = 14일 때, i = 7은 (7 / 4) = 1 (행)과 (7 % 4) = 3 (열)로 계산됩니다. 그러면 Math.max(1, 3) + 1 = 4가 됩니다.
- 이 과정을 반복하여 모든 i에 대해 값을 계산합니다.
정답은 더보기 클릭
더보기
class Solution {
public int[] solution(int n, long left, long right) {
// 결과를 저장할 배열을 초기화, 크기는 right - left + 1
int[] result = new int[(int)(right - left + 1)];
int index = 0; // result 배열에 값을 채울 때 사용할 인덱스
// left부터 right까지 순회하면서 각 위치에 해당하는 값을 계산
for (long i = left; i <= right; i++) {
// i를 n으로 나눈 몫은 행(row), 나머지는 열(col)을 나타냄
int row = (int)(i / n);
int col = (int)(i % n);
// 2차원 배열에서 현재 위치의 값을 계산하여 result 배열에 저장
result[index++] = Math.max(row, col) + 1;
}
return result; // 최종적으로 계산된 배열을 반환
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] [1차] 캐시 (0) | 2024.08.14 |
---|---|
[프로그래머스] 행렬의 곱셈 (0) | 2024.08.12 |
[프로그래머스] 게임 맵 최단거리 (0) | 2024.08.01 |
[프로그래머스] 연속 부분 수열 합의 개수 (0) | 2024.07.26 |
[프로그래머스] 주식가격 (0) | 2024.07.26 |