728x90
https://www.acmicpc.net/problem/1316
실버5 - 구현
1. 문제
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.
2. 아이디어
1) 알파벳 갯수만큼 [0]*26 길이의 리스트를 만든다.
2) 문자의 아스키코드를 활용해서 이전에 나왔던 알파벳인지 확인한다.
-> 비효율적이고 좀 억지스러운 부분이 있음
3. 코드
✅내가 푼 코드
n = int(input())
words = []
result = n #그룹단어 갯수
for _ in range(n):
words.append(input())
for word in words:
before_char = None
abcList = [0] * 26
for char in word:
if char != before_char or before_char is None:
char_index = ord(char)-97
abcList[char_index] += 1
before_char = char
max_value = max(abcList)
if max_value != 1:
result -= 1
print(result)
✅개선된 코드
def is_group_word(word):
seen = set()
before_char = None
for char in word:
if char != before_char:
if char in seen:
return False
seen.add(char)
before_char = char
return True
n = int(input())
result = 0
for _ in range(n):
word = input().strip()
if is_group_word(word):
result += 1
print(result)
1) set()을 이용한다.
char in seen 만 해도 이전에 등장한 알파벳인지 알수있어서 굳이 아스키코드를 이용하지 않아도 된다.
2) 그룹단어인지 아닌지 True, False를 반환하는 함수를 만든다.
True면 1을 더해준다.
728x90
'알고리즘&자료구조 > Algorithm' 카테고리의 다른 글
백준 1475 - 방 번호 (0) | 2024.07.26 |
---|---|
백준 1268 - 임시 반장 정하기 (0) | 2024.07.26 |
백준 1157 - 단어공부 (0) | 2024.05.23 |
백준 1018 - 체스판 다시 칠하기 (0) | 2024.05.20 |
백준 1085 - 직사각형에서 탈출 (0) | 2024.05.19 |