문제 :
당신에게는 다양한 색상의 양말이 무작위로 섞인 큰 양말 더미가 있습니다.
각 양말의 색상은 정수로 표시되며, 배열로 제공됩니다.
이 배열에서 각 색상의 양말이 몇 개씩 있는지 파악한 후,
같은 색상의 양말이 몇 쌍(pair)이나 만들어질 수 있는지를 계산해야 합니다.
입력값:
첫 번째 줄에는 양말의 총 개수를 나타내는 정수 n이 주어집니다.
두 번째 줄에는 각 양말의 색상을 나타내는 n개의 정수 배열 ar이 주어집니다. 각 정수는 특정 색상을 나타냅니다.
출력값:
같은 색상의 양말이 몇 쌍이나 만들어질 수 있는지를 나타내는 정수 값을 출력합니다.
예시:
입력:
9
10 20 20 10 10 30 50 10 20
출력:
3
설명:
위의 예시에서 10 색상의 양말은 4개가 있으며, 2개의 페어를 만들 수 있습니다.
20 색상의 양말은 3개가 있으며, 1개의 페어를 만들 수 있습니다.
총 3개의 페어가 만들어질 수 있습니다.
제약 조건:
1 <= n <= 100
1 <= ar[i] <= 100 (i는 1부터 n까지의 인덱스를 가집니다)
이 문제는 간단한 배열 처리 및 페어 계산 문제로,
주어진 색상 정보에 따라 얼마나 많은 페어를 만들 수 있는지 계산하는 문제입니다.
코드
def sockMerchant(n, ar):
# 색상별로 양말의 개수를 셈
sock_count = {}
for sock in ar:
if sock in sock_count:
sock_count[sock] += 1
else:
sock_count[sock] = 1
# 페어의 수를 계산
pairs = 0
for count in sock_count.values():
pairs += count // 2
return pairs
# 예시 입력
n = 9
ar = [10, 20, 20, 10, 10, 30, 50, 10, 20]
# 함수 호출
result = sockMerchant(n, ar)
print(result) # 출력: 3
collections.Counter를 이용한 풀이
- key-value 값으로 데이터 빈도를 확인하고 싶을 때 Counter 사용
from collections import Counter
def sockMerchant(n, ar):
count_dict = Counter(ar)
# Counter({10: 4, 20: 3, 30: 1, 50: 1})
dict_result = dict((k, v // 2) for k, v in count_dict.items() if v > 1)
return sum(dict_result.values())
문제 링크:
https://www.hackerrank.com/challenges/sock-merchant
Sales by Match | HackerRank
How many pairs of socks can Alex sell?
www.hackerrank.com
'Programming > CodingTest' 카테고리의 다른 글
[HackerRank] Forming a Magic Square (마방진) Implementation 문제 (0) | 2024.08.18 |
---|---|
[HackerRank] Electronics Shop (전자제품상점) Implementation 문제 (0) | 2024.08.18 |
[Data] CSV 파일의 데이터 병합 문제 (0) | 2024.08.14 |
[Data] 로그 파일에서 에러 분석 문제 (0) | 2024.08.11 |
[Data] 로그 파일 집계 문제 (0) | 2024.08.11 |