티스토리 뷰
[문제 설명]
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
[제한사항]
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 원소 ≤ 9
numbers의 모든 원소는 서로 다릅니다.
[입출력 예]
[입출력 예 설명]
입출력 예 #1
5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.
입출력 예 #2
1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.
Solution.java
class Solution {
public int solution(int[] numbers) {
// 0~9 다 더하면 45
// 배열에 있는 원소 다 더해서 빼면 => 없는 숫자의 합
int sum = 0;
for(int num : numbers){
sum += num;
}
return 45 - sum;
}
}
Solution.java - Boolean 배열을 활용한 체크 방식
class Solution {
public int solution(int[] numbers) {
boolean[] exists = new boolean[10]; // 인덱스가 곧 숫자 의미
for (int num : numbers) {
exists[num] = true; // 해당 숫자가 있음을 표시
}
int sum = 0;
for (int i = 0; i < 10; i++) {
if (!exists[i]) {
sum += i; // 없는 숫자만 더함
}
}
return sum;
}
}
Solution.java - Set으로 푸는 방식
import java.util.*;
class Solution {
public int solution(int[] numbers) {
Set<Integer> set = new HashSet<>();
for (int i = 0; i <= 9; i++) {
set.add(i);
}
for (int num : numbers) {
set.remove(num);
}
int sum = 0;
for (int missing : set) {
sum += missing;
}
return sum;
}
}
- Set은 "중복을 허용하지 않는" 자료구조.
즉, 같은 값을 두 번 넣어도 한 번만 저장 - 저장 순서를 유지하지 않음 (인덱스로 접근 불가)
- 어떤 값이 "이미 있는지 아닌지" 빠르게 확인할 때 자주 사용 contains()
- 1. 먼저 0~9를 다 Set에 넣기
2. numbers 배열에 있는 숫자들을 set.remove(값) 으로 제거
3. 그럼 남은 건 "빠진 숫자"들만 Set에 남음
4. 그걸 전부 더해서 반환
'알고리즘 공부⛏️' 카테고리의 다른 글
[Java / 프로그래머스] 나누어 떨어지는 숫자 배열 (0) | 2025.04.22 |
---|---|
[Java / 프로그래머스] 가운데 글자 가져오기 (0) | 2025.04.22 |
[Java / 프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2025.04.06 |
[Java / 프로그래머스] 자릿수 더하기 (0) | 2025.04.06 |
[Java / 프로그래머스] 약수의 합 (0) | 2025.04.06 |
댓글