Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

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

Problem Solving

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

흑개 2022. 3. 9. 16:21

https://programmers.co.kr/learn/courses/30/lessons/87390

 

코딩테스트 연습 - n^2 배열 자르기

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int n, long left, long right) {
        int cnt=0;
        int[] answer=new int[(int)(right-left+1)];
        for (long i=left; i<=right; i++){
            int r=(int)(i/n);
            int c=(int)(i%n);
            if (r+1>=c+1){
                answer[cnt++]=r+1;
            }
            else{
                answer[cnt++]=c+1;
            }
        }
        return answer;
    }
}

그대로 구현한다면 시간초과가 뜰 것이다. n^2가 10^14 라서 그렇다.

이 문제의 포인트는 배열의 n번째 수가 2차원 배열의 몇번째에 해당하고, 그 법칙을 찾아내는 것이다.

 

i번째 수를 구한다고 하면, i/n하면 행 번호, i%n하면 열 번호가 나오는데 이 문제의 규칙은

행 번호>=열 번호일 경우 행 번호를 따라가고, 행 번호<열 번호일 경우 열 번호를 따라간다는 점이다. 

이를 이용해서 answer에 넣어준다.