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

hyeok ryu·2024년 5월 24일
0

문제풀이

목록 보기
139/154

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12949


입력

  • 정수 n, left, right

출력

  • 주어진 과정대로 만들어진 1차원 배열을 return

풀이

제한조건

  • 1 ≤ n ≤ 10^7
  • 0 ≤ left ≤ right < n^2
  • right - left < 10^5

접근방법

단순 구현

문제를 이해하기 위해서 단순하게 몇 개를 만들어보자.

1. 단순하게 생각해보기
위의 그림처럼 모든 배열을 만들고 원하는 범위를 잘라서 반환하는 방식을 생각해보자.
제한 조건을 봤을때, n의 범위가 10^7이므로, 모두 생성해서 잘라내기에는 부담스럽다.

2. 규칙을 찾아보기
규칙에 따라 생성하고 변환된 배열을 한번 살펴보자.

1

12	22

123	223	333

1234	2234	3334	4444

12345	22345	33345	44445	55555

123456	223456	333456	444456	555556	666666 

무언가 규칙이 있는것을 알 수 있다.

내가 찾고자 하는 index에 해당 하는 수를 몫과 나머지를 통해서 바로 구할 수 있다.
해당 방식으로 진행해보자.

주의할 점
left와 right의 범위는 int형의 범위 밖이다.
type casting에 주의하자.


코드

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

0개의 댓글