이 영역을 누르면 첫 페이지로 이동
butter_shower 블로그의 첫 페이지로 이동

butter_shower

페이지 맨 위로 올라가기

butter_shower

[백준/BOJ] 4353. 문자열 제곱

  • 2020.09.29 15:23
  • 알고리즘 Algorithm /PS
글 작성자: _rian

문제 링크 : www.acmicpc.net/problem/4354

 

4354번: 문자열 제곱

알파벳 소문자로 이루어진 두 문자열 a와 b가 주어졌을 때, a*b는 두 문자열을 이어붙이는 것을 뜻한다. 예를 들어, a="abc", b="def"일 때, a*b="abcdef"이다. 이러한 이어 붙이는 것을 곱셈으로 생각한다�

www.acmicpc.net

문제

알파벳 소문자로 이루어진 두 문자열 a와 b가 주어졌을 때, a*b는 두 문자열을 이어붙이는 것을 뜻한다. 예를 들어, a="abc", b="def"일 때, a*b="abcdef"이다.

이러한 이어 붙이는 것을 곱셈으로 생각한다면, 음이 아닌 정수의 제곱도 정의할 수 있다.

  • a^0 = "" (빈 문자열)
  • a^(n+1) = a*(a^n)

문자열 s가 주어졌을 때, 어떤 문자열 a에 대해서 s=a^n을 만족하는 가장 큰 n을 찾는 프로그램을 작성하시오.

입력

입력은 10개 이하의 테스트 케이스로 이루어져 있다. 각각의 테스트 케이스는 s를 포함한 한 줄로 이루어져 있다. s의 길이는 적어도 1이며, 백만글자를 넘지 않는다. 마지막 테스트 케이스의 다음 줄은 마침표이다.

출력

각각의 테스트 케이스에 대해, s=a^n을 만족하는 가장 큰 n을 찾은 뒤 출력한다.


풀이 과정

의외로 직접 풀었을 때는 별거 아닌 문제입니다.

n이 올 수 있는 수는 문자열의 길이의 약수입니다. 문자열 길이를 조금 보고있을 수록 더 높은 n이 나오기 때문에 작은 수가 나오면 break를 해주고 결과값을 출력해주면 됩니다.

문자열 길이의 약수이면 문자열을 잘라서 문자열 제곱이 성립하는지를 확인하면 되는 문제입니다.

중간에 입력을 끝까지 받기 위해 sys.stdin.read()를 사용해주었습니다. .을 만나면 EOF이니 그냥 끝내주면 됩니다.

import sys

def solution(data):
  res = 1

  for i in range(len(data)):
    if len(data) % (i+1) == 0:
      if i == 0:
        s = data[0]
      else:
        s = data[:i+1]

      if s * (len(data)//(i+1)) == data:
        res = len(data) // (i+1)
        break
    else:
      continue

  return res

data = sys.stdin.read() # 입력받음
data = data.split('\n')

for one_data in data:
  if one_data == '.':
    break
  else:
    result = solution(one_data)
    print(result)

'알고리즘 Algorithm > PS' 카테고리의 다른 글

[LeetCode] 542. 01 Matrix - BFS  (0) 2020.10.15
[KickStart] Round F 2020 - ATM Queue  (0) 2020.09.29
[백준/BOJ] 4358. 생태학  (0) 2020.09.29
[프로그래머스] 후보키 (python에서 pandas를 활용한 방법)  (0) 2020.09.15
[프로그래머스] 가장 먼 노드 - BFS/그래프  (0) 2020.09.15

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [LeetCode] 542. 01 Matrix - BFS

    [LeetCode] 542. 01 Matrix - BFS

    2020.10.15
  • [KickStart] Round F 2020 - ATM Queue

    [KickStart] Round F 2020 - ATM Queue

    2020.09.29
  • [백준/BOJ] 4358. 생태학

    [백준/BOJ] 4358. 생태학

    2020.09.29
  • [프로그래머스] 후보키 (python에서 pandas를 활용한 방법)

    [프로그래머스] 후보키 (python에서 pandas를 활용한 방법)

    2020.09.15
다른 글 더 둘러보기

정보

butter_shower 블로그의 첫 페이지로 이동

butter_shower

  • butter_shower의 첫 페이지로 이동

검색

메뉴

  • All Categories
  • About Me
  • Guest Book

카테고리

  • 전체보기 (223)
    • 💫 주인장 이야기 (17)
    • 🌱 와글와글뻘글 (27)
    • IT Trends (11)
    • 주인장 일상 (0)
    • 📒 내 마음대로 독서 서평 (12)
    • 머신러닝 꿈나무 (30)
      • 기본 개념 (6)
      • Hands-on! (5)
      • Paper Review (5)
      • 캐린이의 Kaggle (1)
    • 알고리즘 Algorithm (33)
      • PS (8)
    • Computer Engineering (75)
      • Python (8)
      • Cloud Computing (9)
      • C (9)
      • C++ (0)
      • Java (6)
      • Django 장고 (4)
      • 임베디드 시스템 (10)
      • 병렬 처리(Parallel Processing) (9)
      • 데이터 통신 Data communication (4)
      • 유닉스 시스템 (Unix System) (3)
      • GitHub (1)
      • 마이크로 프로세서 (micro processor) (1)
      • 데이터 마이닝 (1)
    • Error Note 🚨 (3)
    • 영어 공부 (6)
      • Live Academy (6)
    • HOBBY (2)
      • Film Log (2)

최근 글

정보

_rian의 butter_shower

butter_shower

_rian

나의 외부 링크

  • Github
  • Facebook
  • Instagram
  • LinkedIn
  • Twitter

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © _rian. Designed by Fraccino.

티스토리툴바