blues_log

오늘 학습한 내용

  • Java : 키오스크 만들기
  • 프로그래머스 문풀

문제상황

어제 해결하지 못했던 소인수분해 문제를 다시 도전했다.

 

문제링크

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

 

프로그래머스

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

programmers.co.kr


시도한 내용

우선, 어제 발견한 오류는 for문을 돌리는 과정에서 나머지가 0인수가 나오면 그 수를 바로 list에 add를 했었다.

ArrayList<Integer> list = new ArrayList<>();
for (int i=2; i<=n; i++) {
	if(n%i == 0) {
		list.add(i);
		n = n/i;
		i = 2;
	}
}

여기서 문제는 i를 다시 2로 초기화를 하는 것이었다.

2로 초기화를 하고, 다시 반복문을 돌면 증감식 때문에 i의 값은 3부터 계산이 되었던 것이다..!

 

그래서 i=2를 i=1로 바꾸어주면 문제는 해결할 수 있었다.

 

다른 방법으로는 if문을 while문으로 바꾸어주어도 문제가 무리없이 해결됐다.

(while문을 사용해야 뭔가 더 소인수분해에 적합하다는 느낌도 받았..)

for (int i=2; i<=n; i++) {
	while(n%i == 0) {
		list.add(i);
		n = n/i;
	}
}

해결

해결한 코드는 다음과 같다.

import java.util.*;

class Solution {
    public int[] solution(int n) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i=2; i<=n; i++) {
            while(n%i == 0) {
                list.add(i);
                n = n/i;
                i = 1;
            }
        }
        
        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); //TreeSet을 사용하면 오름차순으로 나오지만 불안해서 정렬 한 번 더
        return answer;
    }
}

알게된 내용

1. 키오스크 만들기

우선, 내가 정말 아주아주아주 부족하다는 것을 다시 한 번 느끼게 됐다.

 

객체지향부터 시작해서 상속의 개념, 매개변수와 아규먼트의 이해까지.. 개념을 공부했을 때에는 이해가 되었다고 생각했는데, 막상 혼자서 구현을 해보려고 하니까 머릿속이 새하얗게 되버렸다..

 

그래도 어찌어찌 꾸역꾸역 구현은 했지만 많이 부족한 코드같이 느껴진다.

하루 빨리 더 많이 배워서 더 좋은 코드로 많은 것들을 구현할 수 있는 날이 왔으면 좋겠다.

급하게는 절대 생각하지말고 차근차근 공부하다보면 언젠가는 그런 날이 꼭 올 것이다 !

 

https://github.com/hakjunjoo/kiosk/tree/master/kiosk

 

GitHub - hakjunjoo/kiosk: java kiosk program

java kiosk program. Contribute to hakjunjoo/kiosk development by creating an account on GitHub.

github.com

 

2. 프로그래머스 문풀

오늘 느낀 것은 사소한 것 하나까지 꼼꼼하게 문제를 해결해야 한다는 것을 느꼈다.

정답이 될 수 있는 것들도 하나의 실수로 오답이 되는 것들이 반복되면 이는 더 이상 실수가 아니게 되는 것이다.

조금만 더 집중해서 문제를 풀어보자 !!