알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://level.goorm.io/exam/43105/%EC%86%8C%EC%9D%B8%EC%88%98-%EB%B6%84%ED%95%B4/quiz/1
구름LEVEL
코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이
level.goorm.io
Think🤔
while문을 이용해서 for문을 돌려서 만약에 나눠지면 break로 끝내서 2를 다시 나눌 수 있게 만들어 줘야한다.
반복문 안에 반복문이 들어가서 시간 복잡도가 좀 증가하는 것 같다.
하지만 다른 방법은 생각이 나지 않는다!
Solution✍
import java.io.*;
import java.util.ArrayList;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int input = Integer.parseInt(br.readLine());
ArrayList arr = new ArrayList(); // 그냥 배열로 만들면 크기를 지정해야 되는데 딱 지정할 수 없음
while(input > 1){
for(int i=2; i<=input; i++){ // 17이면 17로 나눠야 하기 때문에 <= 까지
if(input % i == 0){
arr.add(i);
input /= i;
break; // 끝내야함
}
}
}
System.out.print(arr.get(0));
for(int i=1; i<arr.size(); i++){
System.out.printf(" %d",arr.get(i));
}
}
}
import java.io.*;
import java.util.ArrayList;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int input = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
while(input > 1){
for(int i=2; i<=input; i++){ // 17이면 17로 나눠야 하기 때문에 <= 까지
if(input % i == 0){
sb.append(i+" ");
input /= i;
break; // 끝내야함
}
}
}
System.out.print(sb.toString().trim());
}
}
Review🤩
특이하게 출력이 마지막에는 띄어쓰기가 안돼서 맞지 않는다고 했다.
그래서 첫번째 값은 그냥 바로 찍어주고
반복문을 printf를 이용해서 앞에 띄어쓰기 한 후 값이 나오게 만들어줬다.
StringBuilder
StringBuilder로 하니 바로 출력할 수 있고 좀 더 깔끔하게 되었다. trim()메서드 좋다!
'Algorithm' 카테고리의 다른 글
[인프런] 알고리즘 Array , Two pointers (0) | 2021.12.27 |
---|---|
[인프런] 알고리즘 String ! 문자 변환 (0) | 2021.12.26 |
[구름] 구구단+ (0) | 2021.12.26 |
[구름] 홀수의 합 (0) | 2021.12.26 |
[구름] 완전제곱수 (2레벨 , 3레벨) (0) | 2021.12.25 |