오늘의 문제
정수 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로 채웁니다.
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;
}
}
오늘의 회고
문제가 이해 되지 않아도 다른 방법을 찾아 문제를 풀 수는 있으나
다른 사람의 풀이 코드를 보며 더 좋은 방식을 생각해 보기로...
99클럽 코테 스터디 5일차 TIL < 전화번호 목록 > (0) | 2024.07.26 |
---|---|
99클럽 코테 스터디 4일차 TIL < JadenCase 문자열 만들기 > (0) | 2024.07.25 |
99클럽 코테 스터디 3일차 TIL < 문자열 내 마음대로 정렬하기 > (1) | 2024.07.24 |
99클럽 코테 스터디 2일차 TIL < x만큼 간격이 있는 n개의 숫자 > (1) | 2024.07.23 |
99클럽 코테 스터디 6일차 TIL < 의상 > (0) | 2024.07.23 |