728x90
📝 문제 설명
정수 n
, left
, right
가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
n
행n
열 크기의 비어있는 2차원 배열을 만듭니다.i = 1, 2, 3, ..., n
에 대해서, 다음 과정을 반복합니다.- 1행 1열부터
i
행i
열까지의 영역 내의 모든 빈 칸을 숫자i
로 채웁니다.
- 1행 1열부터
- 1행, 2행, ...,
n
행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다. - 새로운 1차원 배열을
arr
이라 할 때,arr[left]
,arr[left+1]
, ...,arr[right]
만 남기고 나머지는 지웁니다.
정수 n
, left
, right
가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
⚠️ 제한사항
- 1 ≤
n
≤ 107 - 0 ≤
left
≤right
< n2 left
-right
< 105
🖨 입출력 예
n | left | right | result |
---|---|---|---|
3 | 2 | 5 | [3,2,2,3] |
4 | 7 | 14 | [4,3,3,3,4,4,4,4] |
📂 분류
구현
💡 풀이
n
이 최대 107까지 주어지므로 2차원 배열을 만들어 구현하는 방식으로는 문제를 해결하지 못한다.
따라서 2차원 배열을 직접 구현하지 않고 1차원 배열을 이용해 문제를 풀어야 한다. 여기서 n x n
배열일 때, (i / n) + 1
은 행의 값이 되고, (i % n) + 1
은 열의 값이 된다.
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
1 | 2 | 2 | 3 | 4 |
2 | 3 | 3 | 3 | 4 |
3 | 4 | 4 | 4 | 4 |
위 행렬을 보면 arr[row][col]
는 row와 col 중 큰 값 + 1이 되는 것을 알 수 있다.
따라서 left
부터 right
까지 반복하면서 answer에 max(row, col) + 1
을 저장해주면 된다.
💻 코드
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++) {
long row = i / n;
long col = i % n;
answer[idx++] = Math.max((int)row, (int)col) + 1;
}
return answer;
}
}
728x90
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 Lv2 - 스킬트리 (0) | 2022.04.15 |
---|---|
[Java] 프로그래머스 Lv2 - 쿼드압축 후 개수 세기 (0) | 2022.04.13 |
[Java] 프로그래머스 - 로또의 최고 순위와 최저 순위(Level 1) (0) | 2022.04.10 |
[Java] 프로그래머스 - 점프와 순간 이동 (Level 2) (0) | 2022.04.09 |
[JAVA 풀이] 프로그래머스 - 이진 변환 반복하기 (Level2) (0) | 2022.04.07 |