반응형
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
접근법
알파벳 배열을 만들어서 단어를 훑는 방법을 생각했다.
단어를 입력받아서 배열로 할당을 한다. 같은 단어인지를 flag(깃발)을 통해 같은 그룹이면 1, 아니면 0으로 한다. 마지막에 깃발이 1이면 count를 증가시킨다.
코드
n = int(input())
count = 0
for _ in range(n) :
alphabet = [0] * 27
word = [x for x in input()]
flag = 1
prev_letter = word[0]
alphabet[ord(word[0]) - 97] = 1
if len(word) == 1 :
count += 1
continue
for i in range(1, len(word)) :
if alphabet[ord(word[i]) - 97] == 0:
alphabet[ord(word[i]) - 97] = 1
prev_letter = word[i]
elif prev_letter != word[i] :
flag = 0
break
if flag :
count += 1
print(count)
입력받은 단어를 알파벳으로 변환해서 리스트를 채우고 첫 인덱스의 알파벳을 prev_letter라는 변수에 첫 알파벳으로 지정을 했다. 이 알파벳을 기준으로 하나씩 인덱스를 옮겨가며 같은 단어인지 확인을 할 것이다.
중복 등장하는 단어인지는 아스키코드로 인덱스에 접근해서 확인한다. 아스키코드로 a는 97에 해당된다. 그렇기때문에 ord()함수로 아스키코드 변환 후, 97을빼주면 0~26인덱스로 관리가 가능해진다.
사실 기본적인 문제인데 이상하게 코드를 짜지 짜는데 실수를 많이해서 오래 걸렸다. prev_letter도 지정안하고, 아스키코드에서 97빼주는걸 까먹어서 list out of index도 뜨고 while반복문 쓰다가 무한루프에도 빠지고.. 여러모로 지치는 문제였다.
반응형
'알고리즘' 카테고리의 다른 글
백준 11721 열 개씩 끊어 출력하기 파이썬 풀이 (0) | 2024.01.17 |
---|---|
백준 10953 A+B - 6 파이썬 풀이 (0) | 2024.01.17 |
백준 9012 괄호 파이썬 풀이 (2) | 2024.01.15 |
백준 25206 너의 평점은 파이썬 풀이 (2) | 2024.01.14 |
백준 2839 설탕 배달 파이썬 풀이 (2) | 2024.01.12 |