blues_log

오늘 학습한 내용

  • Java : 반복문과 배열 내용 복습, 프로그래머스 문제 풀이

내용

프로그래머스 문제 (해결되지 않은 문제)

문제는 배열 만들기 2이다.

코드를 실행하면 테스트 코드들은 문제 없이 실행되지만..

테스트 1 〉	통과 (7.53ms, 80.7MB)
테스트 2 〉	통과 (6.90ms, 75.3MB)
테스트 3 〉	통과 (50.01ms, 84.2MB)
테스트 4 〉	통과 (47.62ms, 90.5MB)
테스트 5 〉	통과 (32.84ms, 80.9MB)
테스트 6 〉	통과 (19.33ms, 79.8MB)
테스트 7 〉	통과 (1058.34ms, 83.7MB)
테스트 8 〉	통과 (1612.52ms, 97.1MB)
테스트 9 〉	통과 (3273.91ms, 104MB)
테스트 10 〉	실패 (시간 초과)
테스트 11 〉	통과 (772.21ms, 82.2MB)
테스트 12 〉	통과 (8.31ms, 74.6MB)
테스트 13 〉	통과 (8.74ms, 78.3MB)
테스트 14 〉	통과 (40.95ms, 83.2MB)
테스트 15 〉	통과 (22.22ms, 83.2MB)
테스트 16 〉	통과 (7.02ms, 77.5MB)
테스트 17 〉	통과 (12.74ms, 82.7MB)
테스트 18 〉	통과 (641.00ms, 95MB)
테스트 19 〉	통과 (33.95ms, 85.5MB)
테스트 20 〉	통과 (1195.37ms, 97MB)
테스트 21 〉	실패 (시간 초과)
테스트 22 〉	통과 (144.25ms, 97.1MB)

제출을 하게 되면 위와 같이 테스트 10, 테스트 21에서 시간 초과로 내가 작성한 코드가 통과되지 않았다..

 

내가 작성한 코드는 다음과 같다.

import java.util.*;

class Solution {
    public int[] solution(int l, int r) {
        List<Integer> list = new ArrayList<>();
        for (int i=l; i<=r; i++) {
            if(i%5==0) {
                list.add(i);
            }
        }
        int[] answer = new int[list.size()];
        for (int i=0; i<list.size(); i++) {
            answer[i] = list.get(i);
        }
        List<Integer> li = new ArrayList<>();

        for (int i=0; i<answer.length; i++) {
            String a = answer[i] + "";
            for (int b=0; b<a.length(); b++) {
                if ((a.charAt(b)-'0')%5 == 0) {
                    continue;
                }
                li.add(Integer.parseInt(a));
            }
        }
        list.removeAll(li);
        int[] result;
        if (list.size() != 0) {
            result = new int[list.size()];
            for (int i=0; i<list.size(); i++) {
                result[i] = list.get(i);
            }
        } else {
            result = new int[1];
            result[0] = -1;
        }
        return result;
    }
}

 

더 쉽게 풀 수 있는 알고리즘이 분명 존재할 것이다. 더 고민해보자..!

 

+) 인터넷에서 열심히 찾아본 결과 아무래도 List에서 Array로 변경되는 과정이 시간이 오래걸린다는 이야기가 많았다.

내가 작성한 코드가 아무래도 List에서 Array로 변경하는 부분이 많아서 시간초과가 났던 것 같다.

 

더 좋은 풀이 방법을 얼른 생각해보자..!

 


느낀점

 

코딩 공부를 시작하기 전에 수학과 관련이 프로그래밍은 수학이 정말 중요하다는 말을 들었었는데 실제 공부를 하면서는 크게 와닿지 않았었다. 그런데 코딩 문제를 풀면서 수학 문제를 푸는 것이랑 정말 비슷하다는 생각이 많이 들었다.

 

뭔가 수학을 전공한 것이 도움이 되고 있구나라고 생각하게 된 하루였던 것 같다.