Algorithm/java

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

현이승 2023. 5. 4. 15:29
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;
    }
}

 

처음 진행할 때 2차원 배열을 선언하고 값을 다 넣은뒤 진행하였는데 시간초과, 메모리초과가 떴다.

이를 해결하기 위해 left, right에 해당하는 값만을 계산하여 넣는 방식으로 진행하였다.

 

여기서 2차원 배열의 값은 (x, y) 라고 가정했을 때 x+1 과 y+1중 큰값 이라는 것이다

1  (0,0) 2  (0,1) 3  (0,2) 4  (0,3)
2  (1,0) 2  (1,1) 3  (1,2) 4  (1,3)
3  (2,0) 3  (2,1) 3  (2,2) 4  (2,3)
4  (3,0) 4  (3,1) 4  (3,2) 4  (3,3)

 

Math.max() 함수를 이용하여 해당 값을 구하고 left를 1씩 증가시킴으로써 원하는 answer을 구할 수 있다.