본문 바로가기
알고리즘 & 자료구조/프로그래머스

N^2 배열 자르기

by 신재권 2023. 1. 18.
package programmers;

import java.util.Arrays;

public class N2배열자르기 {

   //(1,1)(1,2)(1,3)
   //(2,1)(2,2)(2,3)
   //(3,1)(3,2)(3,3)
   // ==
   //max(1,1)max(1,2)max(1,3) = 1 2 3
   //max(2,1)max(2,2)max(2,3) = 2 2 3
   //max(3,1)max(3,2)max(3,3) = 3 3 3
   // ==
   //1차원 배열로 변환
   //idx    = 0 1 2 3 4 5 6 7 8
   //value  = 1 2 3 2 2 3 3 3 3

   // idx / n = 2/3 = 0 + 1 = 1
   // idx % n = 2%3 = 1 + 1 = 2

   //1차원 배열 2번 idx 는 2차원 배열 (1,2)와 같다.
   //(1,2)중 큰 값이 2차원 배열 value 이므로, 1차원 배열의 2번 idx 는 2

   //-> 이런식으로 left...(right-left) 까지 구함
   //(int) 형변환이 가능한 이유는 value 값은 무조건 n 이하이고, n <= 10,000,000 이다.

   public static 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 y = (int)(left / n + 1);
         int x = (int)(left % n + 1);
         left++;
         answer[i] = Math.max(y, x);
      }

      return answer;
   }

   public static void main(String[] args) {
      System.out.println(Arrays.toString(solution(3, 2, 5)));
      System.out.println(Arrays.toString(solution(4, 7, 14)));
   }
}

'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글

뉴스 클러스터링  (0) 2023.01.20
프린터  (0) 2023.01.19
튜플  (0) 2023.01.16
괄호 회전하기  (0) 2023.01.14
행렬의 곱셈  (0) 2023.01.13