
약수구하기
문제 설명
정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 10,000
입출력 예 설명
입출력 예 #1
- 24의 약수를 오름차순으로 담은 배열 [1, 2, 3, 4, 6, 8, 12, 24]를 return합니다.
입출력 예 #2
- 29의 약수를 오름차순으로 담은 배열 [1, 29]를 return합니다.
내가 작성한 코드
import java.util.*;
class Solution {
public int[] solution(int n) {
//set을 이용해서 중복값을 없애고 1부터 쭉하면... 최악인디 졸려서 머리가 안도라간다 오앙오앙 ㅠㅠㅠ
HashSet<Integer> hashset = new HashSet<>();
for(int i = 1; i * i <= n; i++){
if( n%i == 0 ) {
hashset.add(i);
hashset.add(n/i);
}
}
int[] answer = hashset.stream()
.sorted()
.mapToInt(Integer::intValue)
.toArray();
return answer;
}
}
-> 중복값을 위해 set을 이용해야하겠다고 시작한 구현. 참고 블로그와 gpt의 도움을 받아 구현하게되었다. stream은 아직도 이해 못함 ㅠㅠ
서칭 검색어
*set 중복 제거
*약수 구하는 법
GPT 최종 도움
🧠 왜 i * i <= n 이냐?
- 약수는 항상 짝으로 존재
예: 36 → (1,36), (2,18), (3,12), (4,9), (6,6) - √n 이후는 이미 앞에서 처리됨
- i == n/i 인 경우도 Set 이 알아서 처리
🧠 Stream
1. Stream = 데이터를 한 줄로 흘려보내면서 처리하는 파이프
2. Stream 안의 값을 오름차순 정렬
3.
- 현재 타입: Stream<Integer>
- 우리가 원하는 결과: int[]
- Stream<Integer> → int[] 직접 불가
👉 중간에 IntStream으로 변환
4. IntStream → int[]
HashSet<Integer>
↓ stream()
Stream<Integer>
↓ sorted()
Stream<Integer> (정렬)
↓ mapToInt()
IntStream
↓ toArray()
int[]
다른 사람이 작성한 코드
import java.util.stream.IntStream;
import java.util.Arrays;
class Solution {
public int[] solution(int n) {
return IntStream.rangeClosed(1, n).filter(i -> n % i == 0).toArray();
}
}
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(int n) {
List<Integer> answer = new ArrayList<>();
for(int i=1; i<=n; i++){
if(n % i == 0){
answer.add(i);
}
}
return answer.stream().mapToInt(x -> x).toArray();
}
}
-> 똑똑한 사람이 많다.. set이 아닌 arraylist를 사용한 코드와 stream만 이용한 코드를 퍼왔다
회고
stream을 전혀 모른다 다음 코테 구현을 공부해서 사용예정. set을 사용해야겟다고 생각했지만 사용법을 모른다. 공부필요
참고 블로그
https://lold2424.tistory.com/50
[Java] 배열에 중복된 값 제거하는법 (Set)
배열에서 중복값을 제거하는 방법은 크게 2가지(Set, Stream)가 있다. 1. Set Java에서 Set은 중복을 허용하지 않는 컬렉션 인터페이스다. Set은 순서가 없는 요소들의 집합으로, 원소들이 추가된 순서나
lold2424.tistory.com
🔎 약수 구하는 법: Google 검색
www.google.com
'CodingTest > 프로그래머스 (미운영)' 카테고리의 다른 글
| [프로그래머스 Lv.0] 가장 큰 수 찾기 (0) | 2026.01.09 |
|---|---|
| [프로그래머스 Lv.0] 영어가 싫어요 (0) | 2025.08.10 |
| [프로그래머스 Lv.0] 가까운 수 (0) | 2025.08.10 |
| [프로그래머스 Lv.0] 대문자와 소문자 (0) | 2025.08.08 |
| [프로그래머스 Lv.0] 암호 해독 (0) | 2025.08.08 |