문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
색깔별로 짝을 맞춰야 하는 양말들이 있다. 각 양말의 색을 나타내는 배열이 있고, 같은 색의 양말이 몇 켤레가 있는지 확인해라.
n = 7
ar = [1, 2, 1, 2, 1, 3, 2]
색 1과 색2가 각각 한 켤레씩 있다. 한 짝의 양말이 각 색상별로 하나씩, 총 3개가 남는다. 그래서 짝이 맞는 양말은 2 켤레이다.
sockMerchant 함수를 완성해라.
sockMerchant 함수는 아래와 같은 매개변수를 가지고 있다.
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;
}