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

2024. 7. 23. 01:50·스터디/99클럽 코테 스터디 TIL

📝 문제

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
n행 n열 크기의 비어있는 2차원 배열을 만듭니다.i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요

 

1️⃣ 첫번째 시도

import java.util.ArrayList;

class Solution {
    public static int[] solution(int n, long left, long right) {
        ArrayList<Integer> flatArray = new ArrayList<>();

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                flatArray.add(Math.max(i, j));
            }
        }

        return flatArray.subList((int) left, (int) right + 1)
                .stream()
                .mapToInt(i -> i)
                .toArray();
    }
}

 

첫번째 시도는 메모리 초과로 실패하였다.

배열 전체를 구하지 않고 처음부터 left..right 범위만 구하면 이중 for 문을 돌리지 않아도 될 것 같다는 생각이 들었다.

 

2️⃣ 두번째 시도

class Solution {
    public static int[] solution(int n, long left, long right) {
        int[] answer = new int[(int) (right - left + 1)];
        
        int index = 0;
        for (int i = (int) left; i < right + 1; i++) {
            int row = i / n;
            int column = i % n;

            answer[index++] = Math.max(row, column) + 1;
        }

        return answer;
    }
}

두번째 시도는 런타임 에러로 인해 실패하였다.

자세히 보니 for 문에서 left 를 int로 캐스팅하고 있어서 int 의 max 값 이상이 들어오면 에러가 날 수 밖에 없는 결함을 발견하였다.

 

🔥 풀이 성공

class Solution {
    public static int[] solution(int n, long left, long right) {
        int[] answer = new int[(int) (right - left + 1)];

        int index = 0;
        for (long i = left; i < right + 1; i++) {
            int row = (int) (i / n);
            int column = (int) (i % n);

            answer[index++] = Math.max(row, column) + 1;
        }

        return answer;
    }
}

 

위 코드와 같이 수정하여 풀이 성공

 
 

 

 

'스터디 > 99클럽 코테 스터디 TIL' 카테고리의 다른 글

99클럽 코테 스터디 6일차 TIL 의상  (0) 2024.07.28
99클럽 코테 스터디 5일차 TIL 전화번호 목록  (0) 2024.07.26
99클럽 코테 스터디 4일차 TIL JadenCase 문자열 만들기  (0) 2024.07.25
99클럽 코테 스터디 3일차 TIL 문자열 내 마음대로 정렬하기  (1) 2024.07.25
99클럽 코테 스터디 2일차 TIL x만큼 간격이 있는 n개의 숫자  (2) 2024.07.23
'스터디/99클럽 코테 스터디 TIL' 카테고리의 다른 글
  • 99클럽 코테 스터디 5일차 TIL 전화번호 목록
  • 99클럽 코테 스터디 4일차 TIL JadenCase 문자열 만들기
  • 99클럽 코테 스터디 3일차 TIL 문자열 내 마음대로 정렬하기
  • 99클럽 코테 스터디 2일차 TIL x만큼 간격이 있는 n개의 숫자
Been
Been
  • Been
    Been
    Been
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 언어 (0)
        • Kotlin (0)
      • 안드로이드 (17)
      • iOS (3)
      • Git (1)
      • 스터디 (39)
        • 알고리즘 문제 풀이 (1)
        • 99클럽 코테 스터디 TIL (38)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Android
    RecyclerView
    99클럽
    TIL
    Androiod
    FragmentStateAdapter
    AndroidID
    Coroutines
    깃
    maxWidth
    NSR
    EditText
    자바
    밑줄제거
    IOS
    안드로이드
    debugRuntimeClasspath
    Git
    아이폰
    풀이실패
    개발자취업
    객체변환
    리싸이클러뷰
    항해99
    java
    쓰기권한
    WRITE EXTERNAL
    코딩테스트준비
    언더라인 제거
    nsl
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Been
99클럽 코테 스터디 1일차 TIL n^2 배열 자르기
상단으로

티스토리툴바