blues_log

오늘 학습한 내용

  • Java : 내배캠 개인과제 (키오스크 만들기)
  • 프로그래머스 문풀

문제상황

오늘은 소인수분해라는 문제에서 문제가 발생했다.

 

다양한 방법을 시도했는데 하나씩 오류가 발생했다.

결국 오늘은 이 문제를 해결하지 못했따..

 

문제는 다음과 같다.

https://school.programmers.co.kr/learn/courses/30/lessons/120852

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


시도한 내용

우선, 문제에서 원하는 것은 중복되는 원소가 없어야하고, 배열의 결과가 오름차순으로 정렬이 되어야한다.

 

그래서 List를 Set으로 바꾸어주어 중복을 제거하고, 다시 List로 바꾸어서 배열의 순서를 보장하는 방법을 사용했다.

 

그래서 작성한 코드는 다음과 같다.

import java.util.*;

class Solution {
    public int[] solution(int n) {
        List<Integer> list = new ArrayList<>();
        for (int i=2; i<=n; i++) {
            if(n%i == 0) {
                list.add(i);
                n = n/i;
            }
        }
        
        TreeSet<Integer> list2 = new TreeSet<Integer>(list);
        ArrayList<Integer> list3 = new ArrayList<Integer>(list2); //list의 중복 제거 과정
        
        int[] answer = new int[list3.size()];
        for(int i=0; i<list3.size(); i++) {
            answer[i] = list3.get(i);
        }
        Arrays.sort(answer);
        return answer;
    }
}

하지만 위 코드의 결과는 정확성 79.2.. 어딘가가 오류가 발생한 것인데

 

여러가지 반례를 찾아본 결과 n을 i로 나누었을 때 나머지가 0인 수 중에서 i가 소수가 아닐 수 있다는 오류를 발견했다.

이 부분만 수정하면 문제를 해결할 수 있을 것 같다.

 

또 얼마동안 생각하고 고쳐봤지만 아쉽게 오늘은 해결하지 못했다..


해결

 


알게된 내용

오늘은 핑계일 수 있지만 몸상태가 너무 안좋았어서 평소보다 집중을 하지 못했던 것 같다.

오늘은 푹 쉬고 내일부터는 더욱 힘내서 오늘 해결하지 못했던 문제도 풀고, 개인 과제도 열심히 해보자 !!