코테/프로그래머스

[프로그래머스/Lv. 2] n^2 배열 자르기 (JAVA)

imname1am 2023. 9. 13. 17:02
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.*;
import java.io.*;
 
class Main {
    public static void main(String[] args) throws IOException {
        solution(325);  // 결과 : 3 2 2 3
    }
    
    public static int[] solution(int n, long left, long right) {
        int[] answer = new int[(int)(right - left) + 1];
        int idx = 0;
        
        for(long i = left ; i <= right ; i++) {
            long row = i / n;    // 행의 값
            long col = i % n;    // 열의 값
            
            answer[idx++= Math.max((int)row, (int)col) + 1;    // 둘 중 큰 값 + 1
            //System.out.print(answer[idx-1] + " ");
        }            
        
        return answer;
    }
}
cs
✅ 해결 아이디어
✔ 구현
📍 2차원 배열을 1차원 배열로 구현할 때
- (i / n)   + 1은 행의 값
- (i % n) + 1은 열의 값
- 그런데 앞의 2차원 배열을 보면 각 칸의 값이 Math.max(row, col) + 1로 구성되어 있다.
  정답 배열을 구할 때도 이것을 활용!

 

💥 유의사항

n이 10^7까지므로 2차원 배열을 만들어 구현하는 방식으로는 문제를 해결할 수 없다.

1차원 배열 사용

 

 


💬 느낀 점

1) 2차원배열을 1차원 배열로 변환하는 저 공식(?)을 외우고 잘 사용해야겠다..

2) 시간 복잡도 상 2차원 배열로 안 될 거 같아서 그럼 long형 2차원 배열을 해야 하나 싶었는데 그게 아니었던 것이다.

   이번에 알게 되었으니까 다음엔 기억할 수 있을 것 같다!

 

1회독 2회독 3회독 4회독 5회독
V 240902      

(참고)

- 풀이 참고

 

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

코딩테스트 연습 - n^2 배열 자르기 정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서,

seongho96.tistory.com

 

 

- 왜 메모리 초과가 뜨는지 알려주심,,, (n이 10^7라 n^2이 int범위를 넘어가서)

 

[프로그래머스,java] Levle2: n^2배열 자르기

문제분석 문제를 읽어보니 꽤나 친절한 문제다! 1. n^2 크기의 배열을 만들고 2. i행 i열 까지 i로 숫자를 세우고 3. 행 마다 모두 잘라서 새로운 1차원 배열을 만들고 4. left~right 사이에 있는 숫자들

taehoung0102.tistory.com

반응형