프로그래머스 월간 코드 챌린지 시즌3 Lv.2 'n^2 배열 자르기' 문제 풀이와 풀이과정 입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/87390
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓문제 설명
정수 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 함수를 완성해주세요.
< 제한 사항 >
⚠️ 입출력 예시
입력 ▼
// n
3
// left
2
// right
5
출력 ▼
[3,2,2,3]
🔍 마주한 문제와 해결 과정
" 2차원 배열에 알맞은 숫자 주입하고 다시 1차원 배열로 재배치해서 잘라오면 되겠다! " 라고 정말 단순하게 생각했던 나를 반성하게 되었다.
// 정답이 아닌 코드 입니다!
import java.util.*;
class Solution {
public int[] solution(int n, long left, long right) {
int intLeft = (int)left;
int intRight = (int)right;
int[] answer = new int[intRight-intLeft+1];
List<Integer> list = new ArrayList<>(2){};
int[] array1 = new int[n*n];
int[][] array2 = new int[n][n];
int c = 1;
for(int i = 0; i < n; i++) {
for(int j = 0; j < c; j++) {
array2[i][j] = c;
list.add(array2[i][j]);
}
for(int j = c; j < n; j++) {
array2[i][j] = j + 1;
list.add(array2[i][j]);
}
c++;
}
for(int i = 0; i < list.size(); i++) {
array1[i] = list.get(i);
}
for(int i = intLeft; i <= intRight; i++) {
answer[i-intLeft] = array1[i];
}
return answer;
}
}
▲ 테스트 케이스만 통과한 실패 코드ㅠ
그렇다.
결국 테스트 케이스 2개가 통과되어 기분 좋게 제출 버튼을 눌렀더니..
이러한 충격적인 결과가 나와버렸다..
메모리 신경 안 쓰고 자료구조 낭비에다 반복문 flex까지 해버린 나 자신. 이번 기회에 메모리를 아끼며 효율적인 코드를 짜는 것의 중요성을 알게 되었다.
🤔 급 마무리..?
결국,
메모리를 절약한 다른 규칙을 아직 찾지 못해 조금 더 시간을 투자해보기로 했다.
얼른 다른 규칙을 찾아 2편에서는 올바른 풀이과정을 올리겠습니다!!
오늘의 깨달음 포스팅 봐주셔서 감사합니다 :)
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 프로그래머스 - 등차수열의 특정한 항만 더하기 (0) | 2024.03.12 |
---|---|
[JAVA] 프로그래머스 - 둘만의 암호 (1) | 2024.03.08 |
[JAVA] 프로그래머스 - A 강조하기 (0) | 2023.05.02 |
[JAVA] 프로그래머스 - 옹알이(1) (0) | 2023.04.05 |
[JAVA] 프로그래머스 - 문자열안에 문자열 (0) | 2023.04.05 |