문제
핸드폰 화면에 문구를 출력해주는 전광판 어플이 있습니다. 문구는 "happy-birthday"로 설정하였습니다. 전광판 어플은 다음과 같은 규칙으로 화면에 문구를 출력해 줍니다.
* 어플은 화면에 14자 문구를 출력합니다.
* 문구는 1초에 왼쪽으로 한 칸씩 움직입니다.
* 문구 이외의 부분은 "_"로 표시됩니다.
* 어플은 설정한 문구를 화면에 반복해 출력합니다.
* 어플은 문구가 다 지나가면 설정한 문구를 반복해 보여줍니다.
* 단, '_'는 공백을 나타냅니다.
예를 들어, 처음에는 화면에 "______________"가 보입니다.
3초 뒤에는 화면에 "___________hap"가 보입니다.
14초 뒤에는 화면에 "happy-birthday"가 보입니다.
20초 뒤에는 화면에 "birthday_____"가 보입니다.
28초 뒤에는 모든 문자열이 지나간 후 "______________"가 보입니다.
29초 뒤에는 다시 첫 번째 문자부터 나타나며, "_____________h"가 보입니다.
문구를 담은 문자열 phrases와 초를 담은 second가 매개변수로 주어질 때, 화면에 보이는 문자열을 출력하도록 solution 함수를 작성해 주세요.
매개변수 설명
문구를 담은 문자열 phrases와 초를 담은 second가 solution 함수의 매개변수로 주어집니다.
* phrases는 "happy-birthday"입니다.
* second는 1 이상 10,000 이하인 자연수입니다.
return 값 설명
solution 함수는 화면에 보이는 문자열을 return 합니다.
예시 설명
화면 처음상태인 "______________"에서 3초가 지나면 화면에는 글자 3개가 왼쪽으로 옮겨진 상태인 "___________hap"가 보입니다.
예시
phrases | second | return |
"happy-birthday" | 3 | "___________hap" |
풀이설명
초를 28로 나누었을 때 나머지의 개수만큼 글자가 나와야 한다는 점에서 착안
숫자 28은 그저 전광판의 길이의 2배이며 이 때 기준은 전광판의 길이로 두면 된다.
나머지가 0~13이라면 빈칸이 앞으로, 글자가 뒤에 배치된다.
이때 글자의 개수가 x이고 14칸 중 x개를 뺀 나머지 칸을 빈칸으로 채운다.
(14-x + x) = 14
반대로 14~28이라면 글자가 앞으로, 빈칸이 뒤에 배치된다.
이때 x는 14보다 큰 수이므로 x에서 14만큼 빼야하며
x-14번째부터 끝까지 글자를 출력하고 남은 칸을 x-14개 출력
(14-(x-14) + x-14) = 14
Python
문자열의 slicing과 concatenation (+,*) 응용한 답안
def solution(phrases, seconds):
x = seconds%28
if x>14:
return phrases[x-14:] + '_'*(x-14)
else:
return '_'*(14-x) + phrases[:x]
print(solution("happy-birthday",3))
print(solution("happy-birthday",20))
# 삼항 연산자 사용 시,
# x = seconds % 28
# return phrases[x-14:] + '_'*(x-14) if x>14 else '_'*(14-x) + phrases[:x]
'Algorithm Problems' 카테고리의 다른 글
[Cos Pro 1급] 1차 5번 - 소용돌이 수의 대각선의 합 (0) | 2021.02.02 |
---|---|
[Cos Pro 1급] [백준] 1차 2번, 3449번 - 해밍거리 (0) | 2021.01.28 |
[Cos Pro 2급] 4차 2번 - 체력 시험 합격 인원 (0) | 2021.01.24 |
[백준] 1094 .py - 막대기 (0) | 2021.01.15 |
[백준] 1157 .py - 단어 공부 (0) | 2021.01.15 |