본문 바로가기
Beakjoon&프로그래머스/Java

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

by 현장 2026. 1. 1.

-Code

class Solution {
    public int[] solution(int n, long left, long right) {
        // 10의 5승으로 제한이기 때문에 가능
        int needLen = (int) (right - left) + 1;
        int[] answer = new int[needLen];

        int idx = 0;
        for (long i = left; i <= right; i++) {
            // row는 현재 값인 i / n에 해당
            long row = i / n;
            // col는 현재 값인 i % n에 해당
            long col = i % n;
            // 해당 row와 col 위치의 값은 두값 중 최대값의 + 1
            // 범위 제한으로 int로 변환 가능
            int val = (int) Math.max(row, col) + 1;
            answer[idx++] = val;
        }
        return answer;
    }
}

범위 때문에 많이 틀렸습니다. 처음에는 2차원 배열을 만들고 값을 가져왔지만 left와 right가 10^14까지 범위여서 long형으로 받는데 그 부분을 간과하여 문제가 생겼습니다. 그래서 right - left가 최대 10^5이어서 answer 길이를 지정할 수 있었고 2차원 배열에 들어가는 값은 max(row, col) + 1인 것은 이전 틀렸을 때 맞는 로직이기 때문에 row와 col을 범위에 따라 구하면 됐습니다. 해당 부분은 힌트와 같이 생각해 보니 n으로 나누면 row 나머지는 col로 귀결되었고 이를 깨닫자마자 바로 풀렸습니다.