코딩뿌시기(연습)
[Java] 없는 숫자 더하기
thisnorm
2025. 1. 22. 14:51
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ numbers의 길이 ≤ 9
- 0 ≤ numbers의 모든 원소 ≤ 9
- numbers의 모든 원소는 서로 다릅니다.
입출력 예
numbers |
result
|
[1, 2, 3, 4, 6, 7, 8, 0] |
14
|
[5, 8, 4, 0, 6, 7, 9]
|
6
|
이번 문제는 시행 착오를 많이 겪었다. 미처 그 겪는 과정을 남기지 못해서 이번 포스팅에는
전부 기록하지 못했다. 가장 먼저 내가 떠올린 알고리즘은 0~9가 담긴 rest 배열을 만들고 최종적으로
이중for문으로 rest[i] 와 numbers[j] 를 비교하여 없는 숫자는 answer에 더하는거였다.
하지만 이러면 문자열 초과했을 때 오류가 날 수 있어서 다르게 바꾸게 되었다.
아래가 새롭게 만든 코드이다.
class Solution {
public int solution(int[] numbers) {
int answer = 0;
boolean[] present = new boolean[10];
for (int i = 0; i < numbers.length; i++) {
int number = numbers[i];
if(0 <= number && number <= 9) {
present[number] = true;
}
}
for(int i = 0; i <= 9; i++) {
if(!present[i]) {
answer += i;
}
}
return answer;
}
}
present 라는 현재 0~9 사이의 값이 존재하는지를 판별해줄 배열이다.
0~9 사이의 값이 존재하는지를 present 배열에 ture or false로 담고
마지막에 for문으로 false면 i 값을 더해 나가는 식이다.
그런데 여느때와 같이 좋아요 수가 가장 많은 다른 사람의 풀이를 보았다.
하지만 이번에는 신선한 충격을 받을 수 있었다.
조건이 주어지고 이것을 절차대로 말그대로 수행시키려고 코드를 짜느라 다른 방식은 생각해 보지 못하였는데
이 사람은 근본적으로 다가가 풀이한 것이었다.
class Solution {
public int solution(int[] numbers) {
int sum = 45;
for (int i : numbers) {
sum -= i;
}
return sum;
}
}
너무 당연한 것인데 문제에 파묻혀 생각해내지 못한 부분이다.
앞으로 다른 부분에 대해서 더 생각해봐야겠다.