[Programmers/JAVA] n^2 배열 자르기

2023. 2. 17. 18:01자바/프로그래머스

 

내 코드

import java.util.*;
class Solution {
    public int[] solution(int n, long left, long right) {
        int[] answer= new int[(int)(right-left)+1];

        //첫 행 list만들기
        int[] list=new int[n];
        for(int i=1; i<=n; i++) {
            list[i-1]=i;
        }

        //{몫, 나머지} 몫은 행이되고 나머지는 열이됨.
        int[] left_array=new int[] {(int)(left/n), (int)(left%n)};
        int[] right_array=new int[] {(int)(right/n), (int)(right%n)};

        int answer_index=0;
        while(true) {
            //n번째 행은 list[0]~list[n-1]까지 숫자가 똑같기 때문에 행이 바뀔때마다 list만들어줌.
            for(int i=0; i<left_array[0]; i++) {
                list[i]=list[left_array[0]];
            }
            if(right_array[0]==left_array[0]) {//행이 같을때
                for(int i=left_array[1]; i<=right_array[1]; i++) {
                    answer[answer_index]=list[i];
                    answer_index++;
                }
                break;
            }
            //행이 같지 않을때
            for(int i=left_array[1]; i<list.length; i++) {
                answer[answer_index]=list[i];
                answer_index++;
            }
            left_array[1]=0;
            left_array[0]++;
        }
        return answer;
    }
}

 

느낀점

잘짰다고 생각했는데 다른 사람들이 짠걸 보고나니까 전혀 아닐때의 기분이란...!!

좀만 더 생각했으면 더 좋게 짤 수 있었을텐데 아쉽다.

list에 전체 코드를 넣으면 long으로 넘어가버려서 런타임에러가 날 것같았다. 그래서 나는 첫번째 행만을 만들어서 그걸 바꿔가면서 answer에 넣어주는 방법을 택했다.

하다보면 나도 더 나아지겠지?

'자바 > 프로그래머스' 카테고리의 다른 글

[Programmers/JAVA] 프린터  (0) 2023.02.20
[Programmers/JAVA] 귤 고르기  (0) 2023.02.20
[Programmers/JAVA] 기능개발  (0) 2023.02.16
[Programmers/JAVA] [1차] 캐시  (0) 2023.02.15
[Programmers/JAVA] 위장  (0) 2023.02.14