흙금이네 블로그

[BOJ] 4354 - 문자열 제곱 (Python) 본문

알고리즘

[BOJ] 4354 - 문자열 제곱 (Python)

흙금 2023. 1. 18. 23:14

 

 

아이디어

 

n은 문자열 내에서 반복되는 패턴의 반복 횟수를 의미하므로,

입력 받은 문자열에서 반복되는 패턴의 길이를 찾은 후 문자열 길이를 패턴의 길이로 나눈다.

 

 

풀이 #1

 

while문에서 입력 받은 문자열 s가 마침표라면 break로 while문을 탈출한다.

s를 두 번 더한 문자열에서 인덱스 0이 아닌 s의 인덱스를 찾고, 문자열 길이를 찾은 인덱스(패턴의 길이)로 나눈다.

11585번 속타는 저녁 메뉴의 풀이 #2와 같은 원리로 동작한다.

 

while 1:
    s = input()
    if s == '.':
        break
    print(len(s)//(s*2).find(s, 1))

 

 

 

풀이 #2

 

바다코끼리 연산자를 이용하면 숏코딩이 가능하다.

while문의 조건식에서 s에 입력 값을 할당과 동시에 반환하면서 마침표가 아닌 동안 실행문을 반복한다.

 

while(s:=input())!='.':print(len(s)//(s*2).find(s,1))

 

Comments