상세 컨텐츠

본문 제목

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

항해99

by INJILEE 2024. 7. 23. 10:27

본문

오늘의 문제

 

정수 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 ≤ n ≤ 107
0 ≤ left ≤ right < n2
right - left < 105

입출력 예
n	left	right	result
3	2	5	[3,2,2,3]
4	7	14	[4,3,3,3,4,4,4,4]

 

학습 키워드

 

2차원 배열

 

2차원 배열 생성 - >  자료형 배열이름[세로크기][가로크기] = { { 값, 값, 값 }, {값, 값, 값} };

 

 

문제 풀이

1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
  1. 위 문제 설명이 이해 되지 않아 for 문을 이용하여 2차원 배열 생성
  2. 2차원 배열 생성 후 1차원 리스트에 담아 left 부터 right 까지 출력
import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int n, long left, long right) {
     int[] answer = new int[(int) (left+1)];
		int[][] arr =  new int[n][n];
		List<Integer> arrLst = new ArrayList<>();
        
       for(int i=0; i<n; i++) {
    	   for(int j=0; j<n; j++) {
    		   if(i<j) {
    			   
    			   arr[i][j] = j+1;
    		   }else {
    			   arr[i][j] = i+1;
    		   }
    		   arrLst.add((i*j)+j, arr[i][j]);
    	   }
       }
       
       for (int[] integer : arr) {
		//System.out.println(Arrays.toString(integer));
	}
      // System.out.println(arrLst);
       
        int cnt = 0;
        for(int i=(int)left+1; i<=(int)right+1; i++) {
        	// System.out.println(cnt);
        	answer[cnt] = (int)arrLst.get(i);
        	cnt ++;
        }
        
        //System.out.println(Arrays.toString(answer));
        return answer;
    }
}

 

 

오늘의 회고

 

 

문제가 이해 되지 않아도 다른 방법을 찾아 문제를 풀 수는 있으나
다른 사람의 풀이 코드를 보며 더 좋은 방식을 생각해 보기로...

 

 

 

 

관련글 더보기