SWEA_2007 패턴 마디의 길이(파이썬)

2024. 8. 24. 23:21알고리즘 풀이

문제

패턴에서 반복되는 부분을 마디라고 부른다. 문자열을 입력 받아 마디의 길이를 출력하는 프로그램을 작성하라.

[제약 사항]

각 문자열의 길이는 30이다. 마디의 최대 길이는 10이다.

[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 길이가 30인 문자열이 주어진다.

[출력]

출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)


입력
3
KOREAKOREAKOREAKOREAKOREAKOREA
SAMSUNGSAMSUNGSAMSUNGSAMSUNGSA
GALAXYGALAXYGALAXYGALAXYGALAXY


출력
#1 5
#2 7
#3 6


생각

입력받은 문자열을 순회하면서 한 글자씩 check라는 리스트에 넣는다.
근데 무작정 넣으면 안되고 check에 없으면 넣고 있으면 뺀다.
우리는 글자 길이를 알아야하니까 넣고 뺄 때마다 숫자를 세어준다.
그러다가 완전 반복된 문자를 만나면 리스트는 비어진다.

우리가 1씩 증가시킨 cnt 값을 반절로 나누면 우리가 찾는 문자의 길이가 나온다.

코드

for _ in range(int(input())):
    check = []              # 한글자씩 확인할 예정
    ans = 0                 # 문자의 길이를 넣을 공간
    st = input()            # 입력받은거
    for s in st:            # 입력받은 문자열을 한 문자씩 순회
        if s not in check:  # 리스트에 없으면 넣고
            check.append(s)
            ans += 1
        else:               # 있으면 빼준다.
            check.pop(check.index(s))
            ans += 1
        if not check:       # 리스트가 비었다면
            ans = ans // 2  # 값을 반으로 나누어 답을 구함
            print(f"#{_+1} {ans}")
            break


 

'알고리즘 풀이' 카테고리의 다른 글

2001_파리퇴치  (1) 2024.08.24
1983_조교의 성적 매기기  (2) 2024.08.24
SWEA_1953_달팽이숫자  (3) 2024.08.24
SWEA_2007 패턴 마디의 길이(파이썬)  (0) 2024.08.24
3304_최장 공통 부분 수열  (2) 2024.08.24