백준 난이도 실버5 정도 되는 '그룹 단어 체커' 문제를 해결해보았다.


이 문제는 그룹 단어라고 해서 한 알파벳이 연속돼서 나타나 한 단어를 이룬 것이다.
즉 입력받은 문자열에서 각 문자를 하나씩 조건에 비교하며 그룹 단어인지 체크한 후 카운팅하는 방식으로 풀어나가면 된다.
[조건]
신경써야할 조건들은
- 이전 단어와 비교하여 같은 단어인지
- 해당 단어가 이미 사용된 적이 있는지
- 최종적으로 그룹 단어인지
이렇게 체크를 해서 카운트 할 수 있다.
PYTHON
import sys
input = sys.stdin.readline
num = int(input())
count = 0
기본 세팅을 해준다.
결과 값을 위해 count 변수 생성
for _ in range(num):
str = input().strip()
check = set()
prev_char = ''
is_group = True
그 후 num의 값만큼 반복해서 문자열을 입력받고 매 반복 시마다 해당 문자열이 그룹 단어인지 체크를 한다.
-> 그러러면 for문을 하나 더 추가해서 문자열의 문자를 다 돌아야 함
[조건1] 앞의 문자와 현재 문자를 비교하기 위해 prev_char 생성. -> 처음엔 빈값임
[조건2] 해당 문자가 이미 사용됐는지 체크하기 위해 check변수를 set자료구조로 생성
[조건3] 해당 문자열이 그룹 단어인지 체크하기 위한 변수 boolean 형태 is_group 생성
for ch in str:
if ch != prev_char:
if ch in check:
is_group = False
continue
check.add(ch)
prev_char = ch
if is_group:
count += 1
각 문자를 돌면서 첫번째로 이전 문자와 같은지 체크를 한다.
다르다면 현재 문자를 사용했다고 체크 -> check 셋에 추가하는데
그 전에 또 하나의 조건을 줘서 이미 현재 단어가 check 셋에 존재한다면 사용했던 단어를 다시 사용했으니 그룹 단어의 조건을
충족하지 못하기 때문에 is_group을 False로 바꿔준 후 반복문을 탈출한다.(해당 문자열은 카운트하지 않고 넘김)
동일한 방식으로 입력받은 문자열들을 모두 체크한 후
print(count)
카운트값을 출력하면 그룹 단어의 갯수를 출력함.
[전체코드]
import sys
input = sys.stdin.readline
num = int(input())
count = 0
for _ in range(num):
str = input().strip()
check = set()
prev_char = ''
is_group = True
for ch in str:
if ch != prev_char:
if ch in check:
is_group = False
continue
check.add(ch)
prev_char = ch
if is_group:
count += 1
print(count)

'Algorithm > 백준' 카테고리의 다른 글
| [백준] 4134: 다음 소수 (1) | 2025.08.09 |
|---|---|
| [백준] 1436번: 영화감독 숌 (2) | 2025.08.06 |
| [백준] 2839번: 설탕 배달 (4) | 2025.08.05 |
| [백준] 1193번: 분수찾기 (5) | 2025.08.04 |
| [백준_BOJ] 10828번 : 스택 (1) | 2024.10.03 |