🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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(3, 2, 5); // 결과 : 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
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 피로도 (JAVA) (0) | 2023.09.13 |
---|---|
[프로그래머스/Lv. 2] 소수 찾기 (JAVA) (0) | 2023.09.13 |
[프로그래머스/Lv.2] 점프와 순간 이동 (JAVA) (0) | 2023.09.07 |
[프로그래머스] 괄호 회전하기 (0) | 2023.07.31 |
[프로그래머스/Lv. 3] 디스크 컨트롤러 (JAVA) (0) | 2023.07.31 |