[HackerRank] Missing Number

아르당·2024년 5월 5일
0

HackerRank

목록 보기
81/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

두 개의 정수형 배열이 주어질때, 두 번째 배열에 첫 번째 배열에 없는 요소를 찾아라.

Example

arr = [7, 2, 5, 3, 5, 3]
brr = [7, 2, 5, 4, 5, 3, 5, 3]

brr 배열은 원래 목록이다. 없는 숫자는 [4, 6]이다.

Function Description

missingNumbers 함수를 완성해라. 없는 숫자의 배열은 정렬돼서 반환해야한다.
missingNumbers 함수는 아래와 같은 매개변수를 가지고 있다.

  • int arr[n]: 없는 숫자가 있는 배열
  • int brr[n]: 숫자의 원래 배열

Returns

  • int[]: 정수형 배열

Constraints

  • 1 <= n,m <= 2 * 10^5
  • n <= m
  • 1 <= brr[i] <= 10^4
  • max(brr) - min(brr) < 100

Solved

예제만 보고 모든 중복을 제거하는 문제인줄 알았다. 하지만 테스트 케이스를 보니까 문제를 잘못 이해하고 있었다. 아래는 문제를 해결한 순서이다.

  1. brr 배열에서 arr 배열의 값을 제거한다.
  2. brr 배열에서 중복된 값을 찾아 유일한 값으로 만든다.
  3. brr 배열을 정렬한다.

이때 results라는 배열을 따로 생성하여 값을 컨트롤했다.

먼저 정수형 리스트 results를 생성한다.

List<Integer> results = new ArrayList<>();

이제 반복문을 사용해서 arr 리스트의 요소를 brr 리스트에서 제거한다.

for(int i = 0; i < arr.size(); i++){
	if(brr.indexOf(arr.get(i)) != -1){
    	brr.remove(brr.indexOf(arr.get(i)));
    }
}

brr 리스트에는 arr 리스트의 요소들이 없어졌다. 이제 brr 리스트의 요소를 results에 담아준다. 이때, results에는 이미 추가된 요소는 다시 추가할 필요가 없다.

for(int i = 0; i < brr.size(); i++){
	if(results.indexOf(brr.get(i)) == -1){
		results.add(brr.get(i));
	}
}

results를 정렬하고, 반환한다.

results.sort(Comparator.naturalOrder());

return results;

All Code

public static List<Integer> missingNumbers(List<Integer> arr, List<Integer> brr) {
	List<Integer> results = new ArrayList<>();

	for(int i = 0; i < arr.size(); i++){
		if(brr.indexOf(arr.get(i)) != -1){
			brr.remove(brr.indexOf(arr.get(i)));
		}
	}

	for(int i = 0; i < brr.size(); i++){
		if(results.indexOf(brr.get(i)) == -1){
			results.add(brr.get(i));
		}
	}

	results.sort(Comparator.naturalOrder());

	return results;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글