Programming/CodingTest
[HackerRank] Gemstones (잼스톤) Strings 문제
wave35
2024. 8. 21. 22:42
문제
여러 암석들이 주어졌을 때, 각 암석은 다양한 원소로 구성됩니다.
여기서 '보석(gemstone)'은 모든 암석에서 공통적으로 발견되는 원소를 의미합니다.
주어진 암석들에서 보석이 되는 원소의 개수를 구하는 문제입니다.
입력:
- 첫 번째 줄: 암석의 개수 N (1 <= 𝑁 <= 100)
- 각 암석은 알파벳 소문자로 이루어진 문자열로 표현되며, 이는 암석에 포함된 원소를 나타냅니다.
STDIN Function
----- --------
3 arr[] size n = 3
abcdde arr = ['abcdde', 'baccd', 'eeabg']
baccd
eeabg
Sample Output
출력:
- 모든 암석에 공통으로 포함된 원소의 개수를 출력합니다.
2
문제 해결 전략
각 암석에서 원소를 집합으로 변환:
- 각 암석의 문자열을 집합(set)으로 변환하면 암석에 포함된 고유한 원소들을 얻을 수 있습니다.
교집합 구하기:
- 첫 번째 암석의 원소 집합을 시작으로, 다음 암석들의 원소 집합과 교집합을 구합니다.
- 교집합에는 모든 암석에서 공통으로 나타나는 원소들만 남게 됩니다.
이 문제는 주어진 여러 문자열에 대해 공통으로 나타나는 문자를 찾는 문제입니다.
이를 해결하기 위해 각 문자열을 집합으로 변환한 후, 교집합을 반복해서 구하는 방법을 사용합니다.
풀이
def gemstones(arr):
# 첫 번째 암석의 원소 집합으로 시작
common_elements = set(arr[0])
# 모든 암석에 대해 교집합 수행
for rock in arr[1:]:
common_elements &= set(rock)
# 교집합에 남은 원소의 개수를 반환
return len(common_elements)
# 예시 실행
rocks = ["abcdde", "baccd", "eeabg"]
print(gemstones(rocks)) # 출력: 2
최종적으로 남은 집합의 원소는 {'a', 'b'}이며,
이 두 개의 원소가 모든 암석에 공통적으로 포함된 원소입니다.
따라서 결과는 2입니다.
- 중간풀이
주어진 배열
rocks = ["abcdde", "baccd", "eeabg"]
첫 번째 암석 "abcdde"의 원소를 집합으로 변환
common_elements = {'a', 'b', 'c', 'd', 'e'}
두 번째 암석 "baccd"의 원소 집합과 교집합을 구하면:
common_elements &= {'a', 'b', 'c', 'd'}
# 결과: {'a', 'b', 'c', 'd'}
세 번째 암석 "eeabg"의 원소 집합과 교집합을 구하면:
common_elements &= {'e', 'a', 'b', 'g'}
# 결과: {'a', 'b'}
https://www.hackerrank.com/challenges/gem-stones/problem?isFullScreen=true
Gemstones | HackerRank
Find the number of different gem-elements present.
www.hackerrank.com