군만두의 IT 공부 일지

[백준] 1316번: 그룹 단어 체커 (파이썬) 본문

코딩테스트/백준

[백준] 1316번: 그룹 단어 체커 (파이썬)

mandus 2024. 4. 13. 19:58

✅문제: 1316번

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

📌개념정리

(1) 집합(Set)

  • 정의: 중복을 허용하지 않는 순서가 없는 자료구조
  • 파이썬에서는 집합 자료형(set)을 이용하여 요소의 중복을 자연스럽게 제거할 수 있음.
  • 파이썬에서 집합 사용
    1. 요소 추가: add() 메소드를 사용하여 집합에 요소를 추가함.
    2. 요소 확인: in 연산자를 사용하여 요소가 집합에 있는지 확인할 수 있음.
    3. 요소 삭제: remove() 메소드를 사용하여 집합에서 요소를 제거할 수 있음.

📌문제풀이

주어진 단어가 그룹 단어인지 판별하는 문제임. 그룹 단어는 문자가 연속해서 나타나야 하며, 이전에 나온 문자가 뒤에 다시 등장하면 안 됨.

1. 입력받은 단어 수만큼 반복
2. 각 단어를 순회하면서 현재 문자가 이전에 등장했는지 그리고 연속된 문자인지 확인
3. 집합을 사용하여 이미 등장했던 문자를 저장
4. 연속되지 않은 문자가 집합에 이미 존재하면 그룹 단어가 아님을 판별
5. 모든 단어를 확인한 후 그룹 단어의 수를 출력
n = int(input())
group_word_count = 0	# 그룹 단어의 개수

for _ in range(n):
    word = input()
    seen = set()	# 이미 등장한 문자 저장
    is_group_word = True	# 현재 단어가 그룹 단어인지 판별
    prev_char = ''	# 이전에 처리한 문자 저장

    for char in word:
        if char in seen and char != prev_char:	# 현재 문자가 이미 등장했었고, 이전 문자와 다르면
            is_group_word = False
            break
        seen.add(char)
        prev_char = char

    if is_group_word:	# 그룹 단어 판별 후 그룹 단어라면
        group_word_count += 1

print(group_word_count)

📌후기

  • 처음에는 문제의 요구사항을 이해하는 데 어려웠지만, 한 번 코드를 작성해보고 나니 집합을 활용하는 법을 이해하게 되었음.
  • 문자열을 순회하며 이전에 본 문자와 현재 문자를 비교하는 로직을 작성하는 방법을 기억해야겠음.

📌참고자료

1) 위키독스, "02-6 집합 자료형 - 점프 투 파이썬", https://wikidocs.net/1015

Comments