백준 1316번 문제
그룹 단어 체커
문제

풀이
1.
우선 문제를 정확하게 이해하는게 중요할 것 같다.
연속이 되는 단어를 찾는것이다.
즉 aba는 a가 이미 나온상태에서 b뒤에 a가 있어서 탈락,
aab는 a가 두번이지만 연속되어서 통과이다. 이러한 기준으로 문제를 풀 면된다.
내가 생각해낸 방법은 set을 이용해서 우선 입력값의 중복을 제거.
반복문으로 입력 단어의 문자만큼 반복하여서 i번 인덱스와 i+1번의 인덱스가 동일하다면, 넘어가고,
i번의 인덱스가 i+1과 다르다면 i번의 문자를 set에서 지움.
이렇게 반복했을때, 만약 set에서 지워진 문자가 단어에 존재한다면 break 후 count는 0으로 유지하고, break가 안되면
카운트에 1을 더한다.
이를 인풋 숫자만큼 반복을 하면 될 것 같다.
2.
위의 방법을 생각하다가 새로운 방법이 생각났다. 이는 좀더 간편한 방법인데
새로운 리스트를 생성해서, 인풋 단어의 문자를 리스트에 추가한다.
이때 이미 리스트에 존재하는 문자가 들어온다면 break한다.
여기서 바로 직전에 나온 문자와 동일하다면, 이는 pass한다.
3.
문제를 풀면서 생각했는데, 카운팅을 하기보다 지우는게 더 나을 것 같다.
즉 1,2,3번 중 그룹 문자가 1,2 번 이라면 +1 +1 하는 것 보다,
그룹문자가 아닐때, n에서 -1을 하는 방법이다.
결국 정리하자면,
n을 받아 몇개의 단어인지 확인.
n번 반복하는데, word를 매개변수로 단어를 받음.
이때, already란 리스트와 last를 초기화.
이는 already는 그룹 문자가 아닌 것을 판별하는 용도이고, last는 연속된 문자를 판별하는 용도이다.
즉 word의 문자가 이전 문자와 다르고, 이미 already에 들어있다면
n에서 -1을 하는 것이다.
즉 그룹체커를 확인해서 +1 하는것 보다 n을 이용해서 아닌것을 -1하는 것이다.
결과
import sys
n = int(sys.stdin.readline().strip())
for _ in range(n):
word = sys.stdin.readline().strip()
already = []
last = ''
for char in word:
if char != last:
if char in already:
n -= 1
break
already.append(char)
last = char
print(n)
Coding_Test/백준/Silver/1316. 그룹 단어 체커 at main · K-MarkLee/Coding_Test
Coding_Test/백준/Silver/1316. 그룹 단어 체커 at main · K-MarkLee/Coding_Test
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - K-MarkLee/Coding_Test
github.com
'코딩테스트 > BaekJoon' 카테고리의 다른 글
| 백준 파이썬 코딩테스트 (행렬 덧셈) (2) | 2025.08.07 |
|---|---|
| 백준 파이썬 코딩테스트 (너의 평점은) (2) | 2025.08.06 |
| 백준 파이썬 코딩테스트 (크로아티아 알파벳) (1) | 2025.08.04 |
| 백준 파이썬 코딩테스트 (단어 공부) (2) | 2025.08.01 |
| 백준 파이썬코딩테스트 (팰린드롬인지 확인하기) (4) | 2025.08.01 |