[HackerRank] Sales by Match

아르당·2023년 10월 27일
0

HackerRank

목록 보기
3/109
post-thumbnail

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

문제

색깔별로 짝을 맞춰야 하는 양말들이 있다. 각 양말의 색을 나타내는 배열이 있고, 같은 색의 양말이 몇 켤레가 있는지 확인해라.

Example

n = 7
ar = [1, 2, 1, 2, 1, 3, 2]
색 1과 색2가 각각 한 켤레씩 있다. 한 짝의 양말이 각 색상별로 하나씩, 총 3개가 남는다. 그래서 짝이 맞는 양말은 2 켤레이다.

Function Description

sockMerchant 함수를 완성해라.
sockMerchant 함수는 아래와 같은 매개변수를 가지고 있다.

  • int n: 총 양말의 수
  • int ar[n]: 각 양말의 색

Constraints

  • 1 <= n <= 100
  • 1 <= ar[i] <= 100
  • 0 <= i < n

풀이

Map을 사용해서 풀었다. 그래서 Map을 선언한다.

Map<Integer, Integer> nCount = new HashMap<>();

반복문을 사용해서 ar을 순회한다. 순회하면서 키와 값을 지정한다. 이때 키는 ar의 값(양말의 색상)이고, 값은 1로 한다. 값을 1로 한 이유는 양말의 색상이 처음 Map에 들어가기 때문이다. 그리고 양말의 색상이 이미 들어가있다면 값에 +1을 한다.

for(int i = 0; i < ar.size(); i++){
	if(nCount.containsKey(ar.get(i))){
    	nCount.put(ar.get(i), nCount.get(ar.get(i)) + 1);
	}else{
		nCount.put(ar.get(i), 1);
	}
}

이러면 양말의 색상별로 갯수가 구해진다.
이제 짝이 맞는 양의 갯수를 담을 count를 선언한다. 그리고 Map을 순회하면서 각 양말의 갯수를 2로 나누어 준다. 몫이 0보다 크면 짝이 맞는 것이므로 count에 더해준다.

for(int k : nCount.keySet()){
	if(nCount.get(k) / 2 > 0){
		count += (nCount.get(k) / 2);
	}
}

전체 코드

public static int sockMerchant(int n, List<Integer> ar) {
	Map<Integer, Integer> nCount = new HashMap<>();

	for(int i = 0; i < ar.size(); i++){
		if(nCount.containsKey(ar.get(i))){
			nCount.put(ar.get(i), nCount.get(ar.get(i)) + 1);    
		}else{
			nCount.put(ar.get(i), 1);
		}
	}

	int count = 0;

	for(int k : nCount.keySet()){
		if(nCount.get(k) / 2 > 0){
			count += (nCount.get(k) / 2);
		}
	}

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

0개의 댓글