반응형
출처: https://programmers.co.kr/learn/courses/30/lessons/86051
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 수 ≤ 9
numbers의 모든 수는 서로 다릅니다.
나의 풀이
import java.util.*;
class Solution {
public int solution(int[] numbers) {
List<Integer> list = getIntegerList(numbers);
Collections.sort(list);
int sum = 0;
for(int i=0;i<10;i++) {
if(list.contains(i)) list.remove(Integer.valueOf(i));
else sum += i;
}
return sum;
}
public List<Integer> getIntegerList(int[] numbers) {
List<Integer> list = new ArrayList<>();
for(int number: numbers) {
list.add(number);
} return list;
}
}
배열을 list 형태로 바꾸고 포함되는 값은 삭제하는 형식으로 풀었다.
포스팅 하면서 다시 보니까 list에 포함되지 않는 경우만 sum에 더해주면 되고 list.remove()의 필요가 없을 것 같다.
List를 안쓰고 싶어서 다른 방법으로도 풀어봤다.
import java.util.*;
class Solution {
public int solution(int[] numbers) {
int before = 0;
int sum = 0;
Arrays.sort(numbers);
for(int number:numbers) {
sum += sumNtoM(before,number);
before = number;
} sum += sumNtoM(before,10);
return sum;
}
public int sumNtoM(int n, int m) {
int sum = 0;
for(int i=n+1;i<m;i++) {
sum+=i;
} return sum;
}
}
배열을 정렬한 뒤에 이전 값+1부터 현재값전까지 합을 계속 구해줬는데 이중 for문을 도는 바람에 오히려 성능이 떨어졌다...
다른 사람 풀이
class Solution {
public int solution(int[] numbers) {
int sum = 45;
for (int i : numbers) {
sum -= i;
}
return sum;
}
}
문제에서 0부터 9까지의 합이라고 고정되어있으니 sum에 모든 값을 더하고, 배열에 포함된 값은 뺀다.
class Solution {
public int solution(int[] numbers) {
return IntStream.range(0, 10).filter(i -> Arrays.stream(numbers).noneMatch(num -> i == num)).sum();
}
}
stream을 이용해 0부터 10 범위의 숫자에서 배열과 매치되지 않는 수를 더한다.
반응형
'Memo > 코테' 카테고리의 다른 글
[백준] 1152번: 단어의 개수 (0) | 2021.10.06 |
---|---|
백준 - 빗물 (JAVA) (0) | 2021.10.01 |
부족한 금액 계산하기 (0) | 2021.09.16 |
프린터 (0) | 2021.06.22 |
방문 길이 (0) | 2021.06.16 |