백준 15947 아기 석환 뚜루루 뚜루

문제

석환이는 오늘 낮에 커피를 마셔서 잠에 들지 못하고 있다. 이불 속에서 너무 심심한 나머지 “아기 석환” 노래를 잠에 들 때까지 부르려고 한다. 석환이는 UCPC 2018 출제진 중의 한 명인 석환(seokhwan)이랑은 달리, 자신의 이름을 sukhwan이라고 쓴다. 노래가 끝나면 다시 처음부터 부른다. 아기 석환 노래는 아래와 같다.

baby sukhwan tururu turu
very cute tururu turu
in bed tururu turu
baby sukhwan

하지만 석환이는 계속 노래를 똑같이 부르기는 심심해서, 노래가 한 번 끝날 때마다 “tururu”와 “turu”에 “ru”를 한 번씩 더 추가해서 다음과 같이 부르려고 한다.

baby sukhwan tururu turu
very cute tururu turu
in bed tururu turu
baby sukhwan

baby sukhwan turururu tururu
very cute turururu tururu
in bed turururu tururu
baby sukhwan

baby sukhwan tururururu turururu
very cute tururururu turururu
in bed tururururu turururu
baby sukhwan

이 때, 석환이가 부르는 노래의 N번째 단어는 무엇일까?

입력
첫 번째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력
첫 번째 줄에 석환이가 N번째로 부를 단어를 출력한다. 여기서 단어란 가사 중 공백으로 구분되는 연속된 알파벳 소문자열을 뜻한다. 단, 출력할 단어가 “tururu...ru”일 때, “ru”가 k(k ≥ 5)번 반복되면 “tu+ru*k”와 같이 출력한다.

예제 입력 1
1

예제 출력 1
baby

예제 입력 2
17

예제 출력 2
turururu

예제 입력 3
45

예제 출력 3
tu+ru*5

풀이 과정

첫 번째는 하드코딩으로 진행했다. 규칙이 보여서 두 번째에는 좀 더 다듬었다.
세 번째에는 ru가 몇 개인지에 따라 정답을 출력했다.

코드 1

N = int(input())

song = ['sukhwan', 'baby', 'sukhwan', 'tururu', 'turu', 'very', 'cute', 'tururu', 'turu',
        'in', 'bed', 'tururu', 'turu', 'baby']

length = len(song)

q, r = divmod(N, length)

result = song[r]

if song[r] in ['tururu', 'turu']:
    if q == 1 and song[r] == 'tururu':
        result = 'turururu'
    elif q == 1 and song[r] == 'turu':
        result = 'tururu'
    elif q == 2 and song[r] == 'tururu':
        result = 'tururururu'
    elif q == 2 and song[r] == 'turu':
        result = 'turururu'
    elif q >= 3 and song[r] == 'tururu':
        result = f'tu+ru*{q + 2}'
    elif q == 3 and song[r] == 'turu':
        result = 'tururururu'
    elif q >= 4 and song[r] == 'turu':
        result = f'tu+ru*{q + 1}'

print(result)

코드 2

N = int(input())
song = ['sukhwan', 'baby', 'sukhwan', 'tururu', 'turu', 'very', 'cute', 'tururu', 'turu',
        'in', 'bed', 'tururu', 'turu', 'baby']
q, r = divmod(N, len(song))
result = song[r]

if result in ['tururu', 'turu']:
    if q == 1 and song[r] == 'turu':
        result = 'tururu'
    elif (q == 1 and song[r] == 'tururu') or (q == 2 and song[r] == 'turu'):
        result = 'turururu'
    elif (q == 2 and song[r] == 'tururu') or (q == 3 and song[r] == 'turu'):
        result = 'tururururu'
    elif q >= 3 and song[r] == 'tururu':
        result = f'tu+ru*{q + 2}'
    elif q >= 4 and song[r] == 'turu':
        result = f'tu+ru*{q + 1}'

print(result)

코드 3

N = int(input()) - 1
song = ['baby', 'sukhwan', 'tururu', 'turu', 'very', 'cute', 'tururu', 'turu',
        'in', 'bed', 'tururu', 'turu', 'baby', 'sukhwan']
k, r = divmod(N, len(song))
result = song[r]

if r in [2, 6, 10]:
    if k >= 3:
        result = f'tu+ru*{k + 2}'
    else:
        result = 'tururu' + 'ru' * k
elif r in [3, 7, 11]:
    if k >= 4:
        result = f'tu+ru*{k + 1}'
    else:
        result = 'turu' + 'ru' * k

print(result)

백준 15947 아기 석환 뚜루루 뚜루

좋은 웹페이지 즐겨찾기