본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 15947 아기 석환 뚜루루 뚜루 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 24.
728x90
반응형

BaekJoon 백준 15947 아기 석환 뚜루루 뚜루 문제는 노래를 잠에 들 때까지 부르려고 한다. 노래가 한 번 끝날 때마다 “tururu”와 “turu”에 “ru”를 한 번씩 더 추가해서 부르려고 할 때, 노래의 N번째 단어를 구하는 문제이다. 난이도는 Bronze 1이다.

 

BaekJoon 15947 아기 석환 뚜루루 뚜루 문제 정보

출처

- https://www.acmicpc.net/problem/15947

알고리즘 분류

- 많은 조건 분기, 구현

난이도

- 브론즈 1 / Bronze 1

 

아기 석환 뚜루루 뚜루 문제 요약

  • “아기 석환” 노래를 잠에 들 때까지 부르려고 한다.
  • 노래가 끝나면 다시 처음부터 부른다. 아기 석환 노래는 아래와 같다.
    • baby sukhwan tururu turu
      very cute tururu turu
      in bed tururu turu
      baby sukhwan
  • 하지만 석환이는 계속 노래를 똑같이 부르기는 심심해서, 노래가 한 번 끝날 때마다 “tururu”와 “turu”에 “ru”를 한 번씩 더 추가해서 부르려고 한다.
  • 이때, 석환이가 부르는 노래의 N번째 단어는 무엇인지 출력한다. 자연수 N(1 ≤ N ≤ 1,000,000)
  • 여기서 단어란 가사 중 공백으로 구분되는 연속된 알파벳 소문자 열을 뜻한다. 단, 출력할 단어가 “tururu...ru”일 때, “ru”가 k(k ≥ 5) 번 반복되면 “tu+ru*k”와 같이 출력한다.

 

문제 풀이 과정

  1. 노래는 14개의 단어로 반복되므로 14개의 단어를 리스트에 저장해놓는다.
  2. N을 14로 나눈 나머지 -1이 단어를 저장해 놓은 리스트의 인덱스이므로 N번째 단어를 구할 수 있다.
  3. 만약 N번 째 단어가 turu를 포함한 파트가 아니라면 그대로 출력하고,
  4. turu를 포함한 파트라면 N // 14를 하여 노래 반복 횟수를 구하여 그 횟수만큼 ru를 추가해준다.
  5. ru가 5번 이상인지 아닌지 구분하여 출력 형식에 맞게 단어를 출력한다.

 

코드 및 설명
  • song - 노래의 단어들을 저장해놓은 리스트
  • cnt - N번 째 단어에 해당하는 song의 인덱스
N = int(input())
song = ['baby', 'sukhwan', 'tururu', 'turu',
        'very', 'cute', 'tururu', 'turu',
        'in', 'bed', 'tururu', 'turu', 'baby', 'sukhwan']

cnt = N % 14 - 1
# turu 파트가 아니라면 그대로 출력
if 'turu' not in song[cnt]:
    print(song[cnt])

# turu가 포함된 파트라면
else:
    # 노래 반복 횟수 만큼 'ru'를 추가한다.
    rst = song[cnt] + 'ru' * (N // 14)
    ruNum = rst.count('ru')
    # 'ru'가 5번 이상이면
    if ruNum >= 5:
        print(f'tu+ru*{ruNum}')
    else:
        print(rst)

BaekJoon 백준 15947 아기 석환 뚜루루 뚜루 문제를 파이썬 python으로 풀어보았다. 많은 조건 분기가 필요한 문제이며, 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글