유니티3D 프로그래밍
백준 단계별로 풀어보기 : 1316번 문제 (그룹 단어 체커) 본문
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
문제
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.
문제풀이
그룹 단어의 조건은 문자가 연속해서 나타나는 건 괜찮지만, 단어가 연속되지 않고 나중에 중복이 되는 것이 안되는 것이다.
내가 푼 방식은 현재 단어와 그 다음 단어를 비교하는데 다음 단어가 현재 단어의 길이보다 길면 오류가 발생하므로 for문을 돌릴 때 조건을 현재 단어의 길이 - 1 이라는 제한을 주고 for문을 돌린다.
for문을 돌리면서 현재 단어와 다음 단어가 같지 않다면 현재 단어를 임시 리스트에 넣는다.
맨 마지막 단어는 비교하지 않기 때문에 중복 값을 판별할 수 없으므로 마지막 단어를 임시 리스트에 넣는다.
문자를 비교하는 for문이 끝나면 임시 리스트 안에 중복값이 있는지 확인한다. set을 통해 리스트의 길이를 비교해서 파악하고 set을 적용한 리스트와 그렇지 않은 리스트의 값이 같다면 그 단어는 그룹단어다.
내가 작성한 코드에서 임시 리스트 내부에 중복된 값이 있는 경우는 hapay와 같이 연속되지 않은 중복 값이 있거나 happa 와 같이 마지막 단어가 중복 값인 경우다.
마지막으로 word 값을 출력하면 끝.
코드
a = int(input())
word = 0
for i in range(a) :
b = input()
count = 0
temp_list = []
for j in range(len(b) - 1) :
if b[j] != b[j+1] :
temp_list.append(b[j])
if j == len(b) - 2 :
temp_list.append(b[j+1])
if len(temp_list) == len(set(temp_list)) :
word += 1
print(word)
'Python > 백준' 카테고리의 다른 글
백준 단계별로 풀어보기 : 1712번 문제 (손익분기점) (0) | 2022.01.26 |
---|---|
백준 단계별로 풀어보기 : 2941번 문제 (크로아티아 알파벳) (0) | 2021.09.23 |
백준 단계별로 풀어보기 : 5622번 문제 (다이얼) (0) | 2021.09.22 |
백준 단계별로 풀어보기 : 2908번 문제 (상수) (0) | 2021.09.21 |
백준 단계별로 풀어보기 : 1152번 문제 (단어의 개수) (0) | 2021.09.21 |