99클럽 코테 스터디 1일차 TIL - [프로그래머스] n^2 배열 자르기 (Java)

seri·2024년 7월 21일
0

코딩테스트 챌린지

목록 보기
26/62
post-thumbnail
post-custom-banner

📌 오늘의 학습 키워드

[프로그래머스] n^2 배열 자르기 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/87390

📌 공부한 내용 본인의 언어로 정리하기

문제 탐색하기

입력 : n, left, right, result (1 ≤ n ≤ 10^7, 0 ≤ left ≤ right < n^2, right - left < 10^5)
출력 : 새로운 1차원 배열 arr[] 출력

가능한 시간복잡도

O(n)

알고리즘 선택

시뮬레이션

📌 코드 설계하기

  1. left와 right 인덱스를 이용해 필요한 범위의 배열의 length만 계산하고, 1차원 배열을 생성한다.
  2. 각 인덱스를 순회하며, 해당 인덱스를 2차원 인덱스로 변환한다. 변환된 인덱스를 사용해 값을 계산하고 배열에 저장한다.
  3. 변환된 인덱스를 사용해 값을 계산하고 결과 배열에 저장한다.
  4. 배열을 출력한다.

📌 오늘의 회고

어떤 문제가 있었고, 나는 어떤 시도를 했는지

처음에는 2차원 배열을 생성했으나, 시간초과가 발생했다. 이후 시뮬레이션 시도를 했다.

어떻게 해결했는지

2차원 배열을 직접 생성하지 않고, 주어진 범위의 인덱스를 이용해 각 값을 계산하는 방식으로 구현했다.

무엇을 새롭게 알았는지

2차원 배열을 꼭 생성할 필요 없이 1차원 배열만으로도 문제를 풀 수 있다.

내일 학습할 것은 무엇인지

시뮬레이션

📌 정답 코드

class Solution {
    public int[] solution(int n, long left, long right) {
        int length = (int) (right - left + 1);
        int[] answer = new int[length];
        
        for (long i = left; i <= right; i++) {
            int row = (int) (i / n);
            int col = (int) (i % n);
            answer[(int) (i - left)] = Math.max(row, col) + 1;
        }
        
        return answer;
    }
}
profile
꾸준히 정진하며 나아가기
post-custom-banner

0개의 댓글