blues_log

오늘 학습한 내용

  • 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;
    }
}

생각한 방법으로 작성한 코드는 위와 같다.

 

결과는... 통과..!


알게된 내용

처음 주어진 조건을 모두 생각하기는 어렵다는 것을 알고, 이러한 과정들이 쌓여야 실력이 향상이 되고,

여러 조건들을 넓은 시야에서 생각할 수 있을 것이다.

 

단기간에 실력이 향상될 것이라는 욕심은 버리고 꾸준하게 열심히 하면 언젠가는 만족스러운 실력을 가질 수 있을 것이다!!