📝 문제
💻 풀이
class Solution {
public static int solution(int[] numbers) {
int sum = 0;
boolean[] arr = new boolean[10];
for (int number : numbers)
arr[number] = true;
for (int i = 0; i < arr.length; i++)
if (arr[i] == false) sum += i;
return sum;
}
public static int solution2(int[] numbers) {
int sum = 45; // 1~9까지의 합
for (int number : numbers)
sum -= number;
return sum;
}
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 6, 7, 8, 0};
System.out.println(solution(numbers));
System.out.println(solution2(numbers));
}
}
👩💻 내 풀이
public static int solution(int[] numbers) {
int sum = 0;
boolean[] arr = new boolean[10];
for (int number : numbers)
arr[number] = true;
for (int i = 0; i < arr.length; i++)
if (arr[i] == false) sum += i;
return sum;
}
나는 정수 배열 numbers에 0~9까지의 숫자 있는지 없는지 boolean 배열을 통해 체크할 수 있지 않을까 하는 아이디어로 문제를 풀었다.
나의 풀이를 정리하자면 다음과 같다.
- 10의 크기를 갖는 boolean 배열 arr를 만든 다음,
- numbers에 있는 숫자가 3일 경우 arr 배열에서 해당 숫자의 인덱스 값 즉, arr[3]을 true로 변경한다.
- 그렇다면 arr 배열에서 false 값을 갖는 인덱스의 값이 찾을 수 없는 숫자를 의미하기 때문에 해당 인덱스의 값들의 합계를 구해 반환한다.
👨💻 인상깊은 풀이
public static int solution2(int[] numbers) {
int sum = 45; // 1~9까지의 합
for (int number : numbers)
sum -= number;
return sum;
}
프로그래머스에서 다른 사람의 답변을 확인 한 후 가장 인상 깊었던 풀이이다.
나는 문제를 읽고 나와있는대로 찾을 수 없는 숫자를 찾아야겠다는 생각을 우선적으로 가졌던거 같은데, 해당 풀이처럼 먼저 0~9까지의 합계를 구한 다음, 정수 배열에 있는 숫자를 하나씩 빼서 답을 도출해내는 방법도 있다는 것을 생각해볼 수 있었다.
이러한 접근이 더 간단하게 문제를 해결할 수 있다고 생각한다.
다음에는 더 나은 해결방법을 생각해볼 수 있도록 해야겠다..!
'💻 Computer Science > 알고리즘' 카테고리의 다른 글
재귀함수 (Recursive Function) (0) | 2023.07.06 |
---|---|
DFS (깊이 우선 탐색) (0) | 2022.05.13 |
LRU (Least Recently Used) (0) | 2022.05.04 |
투 포인터 (two pointers) (0) | 2022.04.21 |
[프로그래머스] n^2 배열 자르기 (Java) (0) | 2022.04.18 |
[Algorithm] SW Expert Academy (달팽이 숫자) (0) | 2022.02.07 |