코딩딩딩
(python) 백준 1316 - 그룹 단어 체커 본문
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
1. 문제 설명
같은 알파벳별로 떨어져 있지 않고 나란히 있는 단어를 그룹단어로 정의하며, 그룹단어의 개수를 구하는 문제
2. 문제 풀이
그룹단어를 결정하는 중요한 점은 각 알파벳별로 나란히 있어야 하는 점이다.
그러므로 나란히 있지 않을 때를 찾아주면 된다.
먼저, 알파벳 26개를 방문했는지 여부를 배열을 활용하여 판단한다. (0: 미방문 1: 방문)
character_status = [0 for _ in range(26)]
입력받은 단어에 대하여 알파벳별로 방문할 때마다 방문여부를 업데이트한다.
그러나, 여기서 방문한 알파벳을 재방문하는 경우가 발생할 수 있다.
이러한 경우에는 그 알파벳이 그 전의 알파벳과 다르다면 그 단어는 그룹단어가 될 수 없다는 것을 알 수 있다.
word = input()
flag = 0 #그룹단어 판단
for j in range(len(word)):
if character_status[ord(word[j]) - ord('a')] == 1: #이미 방문했던 알파벳
if ord(word[j-1]) != ord(word[j]):
flag = 1 #그룹단어X
break
else: #방문하지 않은 알파벳
character_status[ord(word[j]) - ord('a')] = 1
3. 전체 코드
n = int(input())
res = 0
for i in range(n):
character_status = [0 for _ in range(26)]
word = input()
flag = 0
for j in range(len(word)):
if character_status[ord(word[j]) - ord('a')] == 1:
if ord(word[j-1]) != ord(word[j]):
flag = 1
break
else:
character_status[ord(word[j]) - ord('a')] = 1
if not flag == 1:
res += 1
print(res)
'백준' 카테고리의 다른 글
(python) 백준 10828 - 스택 (0) | 2023.10.02 |
---|---|
(python) 백준 5618 - 공약수 (0) | 2023.02.09 |
(python) 백준 7576 - 토마토 (bfs 풀이) (2) | 2023.02.04 |
(python) 백준18870 - 좌표 압축 (0) | 2023.02.04 |
(python) 백준 2606 - 바이러스 (DFS활용) (0) | 2023.01.31 |
Comments