본문 바로가기

백준_알고리즘

[백준] 1316. 구현_그룹단어체커 - Python

문제

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

 

★ 잠깐! 풀기 전에 생각하기

연속되어 나오는 문자는 허락되고, 연속되지 않고 다시 나타나는 문자는 허락되지 않는다.

이 부분에 대한 설정을 해주는 것이 중요하다. 인덱스[-1]을 활용할 것!

import sys

input = sys.stdin.readline

# 전체 cases는 100보다 작거나 같은 자연수이다
n = int(input())

# 답을 출력하는 ans를 지정해준다.
ans=0
for case in range(n):
    word = input().strip()
    check_alpha = ''
    for alpha in word:
        # 체크알파 안에 알파벳이 있는가.
        if alpha not in check_alpha:
            #없으면 그냥 넣어준다.
            check_alpha += alpha
        # 있으면 두가지로 나뉜다. 바로 전에랑 같은가 다른가.
        else:
            # 같으면 그대로 넣어준다.
            if alpha == check_alpha[-1]:
                check_alpha += alpha
            # 다르면 그 즉시 반복문을 종료한다.
            else:
                break
    # 체크알파와 처음 단어가 같으면 그 단어는 추가해주고
    if len(check_alpha) == len(word):
        ans +=1
    # 아니면 pass 한다.
    else:
        pass
        
print(ans)

 

추가로, 비슷하다고 생각한 문제가 하나 있다. 지금 보니 다르지만 복습차원에서 한번더 보기~

문제. 숫자의 의미

정수 0부터 9까지로 이루어진 list를 전달 받아, 연속적으로 나타나는 숫자는 하나만 남 기고 제거한 list를 반환하는 lonely 함수를 작성하시오. 이때, 제거된 후 남은 수들이 담 긴 list의 요소들은 기존의 순서를 유지해야 한다.

#입력
lonely([1, 1, 3, 3, 0, 1, 1]) #>> [1, 3, 0, 1]

이 문제도 마지막 알파벳과 비교하면서 풀어야 한다. 인덱스 [-1]을 활용하여 풀면 괜찮은 문제.

def lonely(a):
    # 반환할 형식
    result = []
    for number in a:
        # 아무것도 들어 있지 않을때는 아래 코드를 실행하면 오류 발생, 그냥 바로 넣어야 한다.
        if len(result)!=0:
            # 무엇이든 한가지 이상 들어가 있다면 가장 마지막이랑 비교하고 같으면 넘어가고
            if number == result[-1]:
                pass
            else:
                result.append(number) # 다르면 결과값에 넣어준다.
        else:
            result.append(number)
    return result