본문 바로가기

프로그래머스(Java)/Level 2

[프로그래머스] n^2 배열 자르기

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. 1차원 배열로 2차원 배열 접근하기
    • 주어진 문제는 실제로 2차원 배열처럼 보이지만, 이를 1차원 배열로 접근할 수 있습니다.
    • 2차원 배열의 인덱스를 1차원 배열로 변환할 때, i / n은 행(row)을 나타내고, i % n은 열(col)을 나타냅니다.
    • 예를 들어, n = 3일 때, i = 4인 경우 (4 / 3)은 행(1), (4 % 3)은 열(1)이 됩니다.
  2. 규칙 찾기
    • 2차원 배열에서 각 위치 (row, col)의 값은 Math.max(row, col) + 1로 결정됩니다.
    • 이 규칙을 통해, 1차원 배열의 각 위치에 대해 계산된 값을 result 배열에 채워넣습니다.
  3. 계산 예시
    • 만약 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