본문 바로가기
Memo/코테

없는 숫자 더하기

by 연로그 2021. 9. 16.
반응형

출처: https://programmers.co.kr/learn/courses/30/lessons/86051

 

코딩테스트 연습 - 없는 숫자 더하기

0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

문제 설명

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