본문 바로가기
코딩테스트/프로그래머스

Level2 - n^2 배열 자르기

by 고구마는호박고구마 2023. 5. 26.

굉장히 고민을 많이 해야했던 문제 

하지만 답은 굉장히 단순했다.

 

매개면수 3, 2, 5 가 주어진다면 왼쪽은2차원 배열 크기, 2는 left , 3은 rignt 가 나오고 답은 아래의 배열 리턴

 

제한사항 n이 10의 7제곱까지 들어올 수 있다.

 

그렇기에 2차원 배열에 저 값을 채워넣는건 힙 메모리 오버가 발생해서 안된다.

그래서 이런 문제는 정해진 범위가 있다면 그 범위만 구하면 답이 구해진다. 

 

1. 규칙 찾기

(1, 1) ( 1, 2 ) ( 1, 3) -> 1 2 3 

( 2, 1) ( 2, 2) ( 2, 3 ) -> 2, 2, 3

( 3, 1) ( 3, 2)  (3, 3) -> 3, 3, 3 

 

크거나 같은 수가 출력이 된다.

위의 제시에서 left 가 2이고 rigt가 5 이기 때문에 

이 부분만 구하면 답을 구할 수 있다.

 

2. left를 통해 x , y 값 구하기 

일단 배열 x : 0, y : 2 를 구하고 각각 +1 x와 y중 크거나 같으면 값을 넣는다.

x 값 - > left/ 크기 +1 

y 값 -> left % 크기 +1 

left 가 2 이면 x : 1 , y : 3 

 

 

 

해결 코드

class Solution {
    public int[] solution(int n, long left, long right) {
        int[] answer = new int[(int)(right - left) + 1];
        for (int i = 0; i < answer.length; i++) {
            int x = (int)(left / n + 1);
            int y = (int)(left % n + 1);
            left++;
            answer[i] = Math.max(x, y);
        }

        return answer;
    }
}

 

댓글