-
[프로그래머스] [JAVA] [Level 2] [월간 코드 챌린지 시즌3] n^2 배열 자르기PROGRAMMERS/챌린지 2022. 10. 1. 02:14
1. (메모리 초과)
import java.util.*; class Solution { public int[] solution(int n, long left, long right) { // 1, 2 int ar[][] = new int[n][n]; for(int i=0; i<ar.length; i++){ for(int j=0; j<ar[0].length; j++){ ar[i][j] = Math.max(i,j) +1; } } // 3 ArrayList<Integer> alist = new ArrayList<>(); for(int i=0; i<ar.length; i++){ for(int j=0; j<ar[0].length; j++){ alist.add(ar[i][j]); } } int intleft = Long.valueOf(left).intValue(); int intright = Long.valueOf(right).intValue(); int[] answer = new int[intright-intleft+1]; // 4 for(int i=0; i<answer.length; i++){ answer[i] = alist.get(intleft+i); } return answer; } }
- 이차원 배열 만들어서 풀기 위해서는 제한사항(10^7 * 10^7)을 돌아서 배열을 만드는 경우가 있다.
- 그래서 메모리 초과에 걸린 듯하다.
2.
위의 1번코드에서 보았을 때 2차원에 배열에 (행, 열) 에서의 max값을 뽑아서 +1 한값으로 초기화하는 방식을 사용했다.
그 방식을 이용하면 된다.
ex) 2행 3열(2차원 배열에서 [1][2]) 은 1 과 2중에서 max값을 뽑아서 +1을 하면 3이다.
이 문제를 풀기위해서는 두가지를 알아내야 한다.1. n을 이용해서 구하려는 순서의 행과 열을 알아내기2. 알아낸 행과 열에 초기화되는 값 알아내기public class Solution { public int[] solution(int n, long left, long right) { int len = (int) right - (int) left; int[] answer = new int[len + 1]; int idx = 0; for (long i = left; i <= right; i++) { // 1 long row = i / n; long col = i % n; // 2 answer[idx++] = Math.max((int)row, (int)col) + 1; } return answer; } }
'PROGRAMMERS > 챌린지' 카테고리의 다른 글
[프로그래머스] [JAVA] [Level 2] [월간 코드 챌린지 시즌2] 괄호 회전하기 (1) 2022.09.26 PROGRAMMERES Level 1 위클리 챌린지 부족한 금액 계산하기 (JAVA 자바) (0) 2022.08.20 PROGRAMMERES Level 1 월간 코드 챌린지 시즌3 나머지가 1이 되는 수 찾기 (JAVA 자바) (0) 2022.08.17 PROGRAMMERES Level 1 월간 코드 챌린지 시즌1 두 개 뽑아서 더하기 (JAVA 자바) (0) 2022.08.13 PROGRAMMERES Level 1 월간 코드 챌린지 시즌1 3진법 뒤집기 (0) 2022.08.06