오늘 학습한 내용
- Java : 객체지향 문법 학습
- 프로그래머스 문제 풀이
문제상황
오늘의 삽질(?)은 이 문제에서 발생했다.
문제 이름은 '2차원으로 만들기'이다.
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/120842
시도한 내용
처음 문제를 접하고 거의 바로 풀이가 생각이 났다.
- 중첩 for문을 이용한다.
- 정수형 배열은 초기화를 시키지 않으면 그 요소값들이 전부 0임을 이용한다.
- 만약 2차원 배열의 원소가 0이면 주어진 배열의 값을 차례로 차곡차곡 쌓는다.
처음 작성한 코드는 다음과 같다.
class Solution {
public int[][] solution(int[] num_list, int n) {
int[][] answer = new int[num_list.length/n][n];
for(int num : num_list) {
Loop : for(int i=0; i<num_list.length/n; i++) {
for(int j=0; j<n; j++) {
if(answer[i][j] == 0) {
answer[i][j] = num;
break Loop; // 이름 달린 반복문
}
}
}
}
return answer;
}
}
이 코드에는 크나큰 오류가 있었다.
바로 처음 주어진 num_list의 모든 배열의 원소가 0이 아니라는 가정이 있어야 했다..!
0뿐만 아니라 음수가 아니라는 가정도 없으니 해당 코드는 결국 버리기로..
다음으로 생각한 방법은 다음과 같다.
- 중첩 for문 이용
- 새로운 인덱스 변수를 지정해주고 변수의 값도 for문에 따라서 순서대로 값이 증가한다.
- 그러면 다시 2차원 배열에 순서대로 차곡차곡 쌓인다.
해결
class Solution {
public int[][] solution(int[] num_list, int n) {
int[][] answer = new int[num_list.length/n][n];
int idx = 0;
for(int i=0; i<num_list.length/n; i++) {
for(int j=0; j<n; j++) {
answer[i][j] = num_list[idx];
idx++;
}
}
return answer;
}
}
생각한 방법으로 작성한 코드는 위와 같다.
결과는... 통과..!
알게된 내용
처음 주어진 조건을 모두 생각하기는 어렵다는 것을 알고, 이러한 과정들이 쌓여야 실력이 향상이 되고,
여러 조건들을 넓은 시야에서 생각할 수 있을 것이다.
단기간에 실력이 향상될 것이라는 욕심은 버리고 꾸준하게 열심히 하면 언젠가는 만족스러운 실력을 가질 수 있을 것이다!!
'TIL&WIL' 카테고리의 다른 글
| 2023-05-27 TIL (git 소스트리 활용하기) (1) | 2023.05.27 |
|---|---|
| 2023-05-26 (Java : 예외 처리 복습, 빠른 입출력) (0) | 2023.05.26 |
| 2023-05-24 TIL (Java, 프로그래머스 문제풀이) (1) | 2023.05.24 |
| 2023-05-23 TIL (Java : Collections Framework, 프로그래머스 문풀) (0) | 2023.05.23 |
| 2023-05-22 TIL (Java : 비트 연산자, 배열에서의 복사) (0) | 2023.05.22 |