코딩테스트/프로그래머스

[프로그래머스] 없는 숫자 더하기

블로그 주인장 2023. 8. 10.


[ 목차 ]

    📢 문제 출처

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr


    ⏰ 문제 설명

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

    ⏰ 입출력 예시

    • 입출력 예 #1
    • (1) 5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.
    • 입출력 예 #2
    • (1) 1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.

    ⏰ 풀이

    ✔ 1번 풀이 (feat. for 문)

    class Solution {
        
        /*=== for문 ===*/
        public static int forArray(int[] numbers){
    
            int answer = 0;  
    
            //0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers
            for (int i = 0; i < 10; i++) {
                boolean checkNum = false;
                for (int j = 0; j < numbers.length; j++) {
                    if(i == numbers[j])
                    {
                        checkNum = true;
                        break;
                    }
                }
    
                if (!checkNum){
                    answer += i;
                }
            }
    
            return answer;
        }    
        
        public int solution(int[] numbers) {
         
            int answer = -1;
            answer = forArray(numbers);
            return answer;
        }
    }
    • 0 ~ 9 까지의 배열 안에서 진행하기 때문에 반복 횟수를 10번으로 제한한다.
    • Flag를 false로 초기화해서 사용해서 리스트 안에 있는 number가 있으면 true로 변경
    • Flag가 false 시에는 값을 더해준다.
    • 반복문이 끝나고 해당 값을 리턴해준다.

    다른 풀이 (feat. stream)

    import java.util.*;
    import java.util.stream.IntStream;
    
    class Solution {
        
        public static int streamArray(int[] numbers) {
            int answer = 0;
    
            //0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers
            answer = IntStream.range(0, 10).filter(n -> Arrays.stream(numbers).noneMatch(k -> n == k)).sum();
            return answer;
        }
        
        public int solution(int[] numbers) {
         
            int answer = -1;
            answer = streamArray(numbers);
            return answer;
        }
    }
    • IntStream.range(A, B)  =======>  for(int i = A; i < B; i++)
    • Filter() 사용 =======> ( ) 안에 들어가는 참인 요소들만 추출
    • (k -> Array.steam(numbers)) =======>  for(int i = k; i < numbers.length; i++)
    • Arrays.steam(numbers).noneMatch() ->  특정 조건을 만족하는 요소가 하나라도 있는 경우 false를 반환 및 실행 중지
    • noneMatch(k -> n == k) =======> (n == k)가 아닌 경우 반환
    • filter().sum() =======> filter 안에 들어간 값을 모두 더해준다.
    • 더해준 값을 answer에 대입하고 return 한다.

     

    반응형

    댓글