본문 바로가기
Blog/TIL

[240527] 코딩테스트 다다익선

by 코젼 2024. 5. 27.
728x90
반응형

🔶코딩테스트

🔶Database


목차

    / 오늘의 TIL /


    코딩테스트

    https://school.programmers.co.kr/learn/courses/30/lessons/87390#

    * 기록

    더보기

    * 정답

    public static int[] solution(int n, long left, long right) {
    
        List<Long> arr = new ArrayList<>();
    
        for (long i = left; i < right + 1; i++) {
            arr.add(Math.max(i/n, i%n) + 1);
        }
    
        return arr.stream().mapToInt(Long::intValue).toArray();
    }

     

    * 오답

    [초기 접근 방법]

    left로 시작하는 인덱스는 [left/n][left%n], right로 끝나는 인덱스는 [right/n][right%n]이어서 해당 인덱스의 값을 모두 더해서 int 배열로 반환하는 것을 목표로 두었다.

    결과는 정확성 45%로 일부는 맞았지만 나머지는 '메모리 초과' 표시됨.

     

    * 회고

    인덱스가 몫과 나머지로 구분되는 것까지 접근한 것은 좋았으나, 값을 찾을 때 각 행과 열의 max값 + 1인 것을 찾지 못해서 번잡하게 코드를 작성했다.

    역시 코테는 문제를 많이 풀고 패턴을 찾는 연습을 해야겠다.

    import java.util.ArrayList;
    import java.util.List;
    
    public class Solution {
    
        public static int[] solution(int n, long left, long right) {
    
            long[][] matrix = new long[n][n];
    
            //초기 값 세팅
            matrix[0][0] = 1;
            for (int i = 1; i < n; i++) {
                matrix[i][i] = i+1;
                for (int j = 0; j < i; j++) {
                    matrix[i][j] = i+1; //행 모두 채우기
                    matrix[j][i] = i+1; //열 모두 채우기
                }
            }
    
            List<Long> arr = new ArrayList<>();
    
            int dl = (int) (left / n);
            int rl = (int) (left % n);
            int dr = (int) (right / n);
            int rr = (int) (right % n);
    
            //시작 행 모두 add
            for (int i = rl; i < n; i++) {
                arr.add(matrix[dl][i]);
            }
            //~마지막 행 전까지 모두 add
            for (int i = dl + 1; i < dr; i++) {
                for (int j = 0; j < n; j++) {
                    arr.add(matrix[i][j]);
                }
            }
            //~마지막 행까지 모두 add
            for (int i = 0; i <= rr; i++) {
                arr.add(matrix[dr][i]);
            }
    
            return arr.stream().mapToInt(Long::intValue).toArray();
        }
    
        public static void main(String[] args) {
            solution(3, 2, 5);
        }
    }
    

     


    Database

    CPU(연산) <-> RAM(메모리, 단기 기억장치) <-> DISK(장기 기억장치)

    서버를 띄워서 API를 동작하면 RAM에 데이터가 저장되고, RAM은 휘발성 데이터기 때문에 서버를 재시작하면 데이터가 없어진다.

     

    데이터베이스: 데이터를 구조화해서 저장한다.

    RDB: 데이터를 표처럼 구조화해서 저장한다.

     

     

    728x90
    반응형

    'Blog > TIL' 카테고리의 다른 글

    [240529] 직접 해봐야 안다  (0) 2024.05.29
    [240528] 백문이 불여일타!  (0) 2024.05.28
    [240526] API 개발하기  (0) 2024.05.26
    [240524] 수학 지식을 넓히자  (0) 2024.05.24
    [240523] 배워도 배워도 끝이 없네  (0) 2024.05.23

    댓글