티스토리 뷰

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에 넣어준다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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 31
글 보관함