📝 문제
> 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/1316
🎨 풀이
💡 성공 코드
# 그룹 단어 체커 함수
def group_word_checker(s):
already_char = []
continue_char = s[0]; # 먼저 첫번째 문자 넣어두고 시작
for i in range(len(s)):
if s[i] != continue_char: # 연속 X
if already_char.count(s[i]) == 0: # 나온 적 없는 문자라면
already_char.append(s[i-1])
continue_char = s[i]
else: # 연속도 아니고, 나온 적도 있다면
return False
return True
import sys
n = int(input()) # 여기서 시작
answer = 0
for _ in range(n):
s = str(sys.stdin.readline())
if group_word_checker(s) == True:
answer += 1
print(answer)
> 핵심 : 문자 돌면서 그 전꺼랑 같지 않은지 체크 후 같지 않다면 이미 나온 문자인지 체크함. 여기서 걸러지면 return False를 해서 넘겨주고, return 되지 않고 끝까지 진행된다면 True를 반환해줌.
# main
1. n 을 입력받는다.
2. for _ in range(n) 은 이 전체 코드를 n번 반복하겠다는 뜻임. (코드가 for문 안에 다 들어가있기 때문!)
3. s를 입력받음.
4. s 넣어준 후 group_word_checker 함수를 실행시킴.
# group_word_checker
5. already_char 리스트와 continue_char 변수를 만들어줌.
- already_char : 연속이 끊긴 문자들을 차례대로 하나씩 모아둘 예정.
- continue_char : 현재 연속되고 있는 문자 (여기서는 s[0]을 미리 넣어줌)
6. s 문자열의 문자 하나씩 for문을 돌린다.
7. 'if s[i] != continue_char' 는 's[i]가 연속되고 있는 문자와 일치하지 않는 다면' 의 뜻을 가지고 있다.
- 즉, 연속이 끊겼다면! 이다.
- 아닌 경우면 그냥 자연스럽게 다음 문자로 넘어가주면 되기 때문에 별다른 처리를 하지 않았다.
8. 'if already_char.count(s[i]) == 0' 은 '나온 적 없는 문자라면' 이라는 뜻이다.
- 7번과 이어지는 부분이다.
9-1. 만약 == 0 이라면, 나온적 없는 문자라는 뜻이기 때문에, already_char에 그 전의 문자 (연속이 끝난 문자)를 넣어주고, continue_char에 현재 문자를 넣어준다.
9-2. 만약 !=0 이라면, 연속도 끊겼는데 나온적도 있다는 뜻이기 때문에 이 함수를 끝낸다. (return False)
10. return False를 하지않고 s 문자열 for문을 잘 끝낸다면 return False를 해준다.
11. return 결과가 True라면 answer += 1 을 해준다.
12. answer를 출력한다.
끝~
⭐ 느낀점
> 아 진짜~ 피곤하다. 밤 샜다. 일어난지 20시간째다. 이렇게 문자로 적고보면 아무것도 아닌 것 같아 보일수도 있지만 나는 체력이 좀 좋은 편은 아니기 때문에 매우 힘들다. 아주 눈이 감기려한다. 하지만,, 저녁 약속이 있기 때문에 억지로 눈 뜨는 중이다. 하하. 이따 내 선수 생일도 챙겨줘야하는디 하하. 여튼 오늘 코테 고생많았다. 이것저것 다 고생많았다 진짜!
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 2292번 - 벌집 (파이썬) (0) | 2022.06.23 |
---|---|
[백준] 1712번 - 손익분기점 (파이썬) (0) | 2022.06.22 |
[백준] 2941번 - 크로아티아 알파벳 (파이썬) (0) | 2022.06.20 |
[백준] 5622번 - 다이얼 (파이썬) (0) | 2022.06.19 |
[백준] 2908번 - 상수 (파이썬) (0) | 2022.06.18 |