
-Code
class Solution {
public int[] solution(int n, long left, long right) {
// 10의 5승으로 제한이기 때문에 가능
int needLen = (int) (right - left) + 1;
int[] answer = new int[needLen];
int idx = 0;
for (long i = left; i <= right; i++) {
// row는 현재 값인 i / n에 해당
long row = i / n;
// col는 현재 값인 i % n에 해당
long col = i % n;
// 해당 row와 col 위치의 값은 두값 중 최대값의 + 1
// 범위 제한으로 int로 변환 가능
int val = (int) Math.max(row, col) + 1;
answer[idx++] = val;
}
return answer;
}
}
범위 때문에 많이 틀렸습니다. 처음에는 2차원 배열을 만들고 값을 가져왔지만 left와 right가 10^14까지 범위여서 long형으로 받는데 그 부분을 간과하여 문제가 생겼습니다. 그래서 right - left가 최대 10^5이어서 answer 길이를 지정할 수 있었고 2차원 배열에 들어가는 값은 max(row, col) + 1인 것은 이전 틀렸을 때 맞는 로직이기 때문에 row와 col을 범위에 따라 구하면 됐습니다. 해당 부분은 힌트와 같이 생각해 보니 n으로 나누면 row 나머지는 col로 귀결되었고 이를 깨닫자마자 바로 풀렸습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [LeetCode/Java] Max Number of K-Sum Pairs (0) | 2026.01.01 |
|---|---|
| [LeetCode/Java] Container With Most Water (0) | 2026.01.01 |
| [LeetCode/Java] String Compression (0) | 2026.01.01 |
| [LeetCode/Java] Increasing Triplet Subsequence (0) | 2026.01.01 |
| [LeetCode/Java] Reverse Linked List (0) | 2026.01.01 |