[JAVA] 없는 숫자 더하기

태로미·2023년 9월 17일
0

Programmers

목록 보기
17/29
post-thumbnail

❓문제


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



🚫제한


  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.


💻입출력 예


numbersresult
[1,2,3,4,6,7,8,0]14
[5,8,4,0,6,7,9]6













📝해결


1. Stream & List

class Solution {
	public int solution(int[] numbers) {

		int answer = 0;
		int[] all = {0,1,2,3,4,5,6,7,8,9};
		List<Integer> list = Arrays.stream(numbers)
			            		   .boxed()
				            	   .collect(Collectors.toList());

		for(int i=0; i<10; i++) {
			if(!list.contains(all[i])) {
				answer += all[i];
			}
		}

		return answer;
	}
}
  • 0부터 9까지 모든 숫자가 담겨 있는 int[] all 배열 생성.
  • 기본형 타입(Primitive Type) 데이터는 참조형 타입(Reference Type)과 달리 Arrays.asList() 메서드 사용으로 리스트 전환 불가.
    • numbers배열 스트림을 생성하여 Integer타입으로 박싱해주고,
      collect를 사용하여 리스트로 전환.
  • 0~9까지 어떤 숫자가 빠졌는지 알기 위해 for문의 범위는 0~9까지 설정.
  • 모든 숫자가 담겨 있는 배열 all의 원소가 list에 포함되지 않으면 이는 없는 숫자이므로 answer에 누적합 후 return.

2. 총 합 - 누적차

class Solution {
	public int solution(int[] numbers) {
    
    	int sum = 45;

		for (int i : numbers) {
			sum -= i;
		}

		return sum;
    }
}    
  • 0부터 9까지의 총 합을 변수 sum에 저장.
  • 향상된 for문을 사용하여 배열 numbers에 있는 원소들을 하나씩 꺼내 sum에서 차감 후 결과 return.

3. Stream

class Solution {
	public int solution(int[] numbers) {
    
    	return 45 - Arrays.stream(numbers).sum();
    }
}    
  • 배열에 스트림을 생성하여 sum() 메서드로 해당 배열 원소의 합을 구한 뒤,
    0~9까지의 총 합(45)에서 뺀 값을 바로 return.






💭마무리

  • Level_1 / 27:56
  • Point
    – 기본형타입 배열의 List 전환
    – Stream의 sum() 메서드
    – 총 합의 누적차

오ㅏ...........우리나라에는 정말 천재들이 많은 것 같다😯😯😯.....!!!!!!!!!!!
그리고 새삼 다시 한 번 Stream의 위력을 깨닫는다...!!!!!🤓!!!!ㅋㅋㅋㅋㅋ
나의 머릿속에서는 총 합에서 빼야겠다 라는 생각은 1도 안들었고~~~
그저 배열에 값이 포함되어 있는지 아닌지를 어떻게 알아낼까?? 에 꽃혀서
리스트의 contains() 메서드가 떠올랐고, 이를 활용하기 위해 배열을 리스트로 바꾸기 위해 스트림을 사용했는데...생각해보니 숫자의 범위가 정해져있고 포함되어있냐 없냐를 구분하기 위해서는 그저 총 합에서 빼면 되었던 것...! 😯!!! 그럼 스트림을 사용해서 굳이굳이 리스트로 변환하지 않고 바로 sum() 메서드로 한 방에 끝낼 수 있었는데!!!!😂😂😂ㅋㅋㅋㅋㅋㅋㅎ ㅑ,,오늘도 배워갑니다✨


profile
Here And Now

0개의 댓글