문제
- n^2 배열 자르기
권장 시간
- 30분
소요 시간
- 1시간 30분
풀이 코드
import java.util.*;
class Solution {
public List<Long> solution(int n, long left, long right) {
List<Long> answer = new ArrayList<>();
for (long i = left; i < right + 1; i++){
answer.add(Math.max(i/n, i%n) + 1);
}
return answer;
}
}
각 행이랑 열마다 패턴이 존재하는데, Max(행, 열)의 인덱스값이 그 자리의 값이 됨
초반에 삽질한 코드
// class Solution {
// public int[] solution(int n, long left, long right) {
// // 1. 2차원 배열 만들기
// int[][] map = new int[n+1][n+1];
// // 2. i행 i열까지 i로 채우기
// for (int i = 1; i <= n; i++) {
// for (int j = 1; j <= n; j++) {
// if (j <= i) {
// map[i][j] = i;
// } else {
// map[i][j] = j;
// }
// }
// }
// // 3. 이어붙인 1차원 배열 만들기
// int[] arr = new int[n*n];
// int x = 1, j = 1;
// for (int i = 0; i < n*n; i++) {
// arr[i] = map[x][j];
// j++;
// if (j == n + 1) {
// j = 1;
// x++;
// }
// }
// // 4. arr[left] ~ arr[right] 까지만 남기기
// int[] answer = new int[(int)(right-left+1)];
// int k = 0;
// for (long i = left; i <= right; i++) {
// answer[k] = arr[(int)i];
// k++;
// }
// return answer;
// }
// }
문제에 나와있는 설명 그대로 구현하려다 메모리 초과가 났다.
제한조건을 우선 확인하고 풀이법을 고민하는게 중요한 것 같다.