Algorithms/Java

99클럽 코테 스터디 1일차 TIL + n^2 배열 자르기 (java)

Jenn28 2024. 7. 22. 16:54

 

문제

- 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;
//     }
// }

 

문제에 나와있는 설명 그대로 구현하려다 메모리 초과가 났다.

제한조건을 우선 확인하고 풀이법을 고민하는게 중요한 것 같다.