Algorithm Problems

[Cos Pro 1급] 3차 5번 - 전광판 어플

WakaraNai 2021. 1. 24. 20:49
728x90
반응형

문제

핸드폰 화면에 문구를 출력해주는 전광판 어플이 있습니다. 문구는 "happy-birthday"로 설정하였습니다. 전광판 어플은 다음과 같은 규칙으로 화면에 문구를 출력해 줍니다.

 

* 어플은 화면에 14자 문구를 출력합니다.

* 문구는 1초에 왼쪽으로 한 칸씩 움직입니다.

* 문구 이외의 부분은 "_"로 표시됩니다.

* 어플은 설정한 문구를 화면에 반복해 출력합니다.

* 어플은 문구가 다 지나가면 설정한 문구를 반복해 보여줍니다.

* , '_'는 공백을 나타냅니다.

 

예를 들어, 처음에는 화면에 "______________"가 보입니다.

3초 뒤에는 화면에 "___________hap"가 보입니다.

14초 뒤에는 화면에 "happy-birthday"가 보입니다.

20초 뒤에는 화면에 "birthday_____"가 보입니다.

28초 뒤에는 모든 문자열이 지나간 후 "______________"가 보입니다.

29초 뒤에는 다시 첫 번째 문자부터 나타나며, "_____________h"가 보입니다.

 

문구를 담은 문자열 phrases와 초를 담은 second가 매개변수로 주어질 때, 화면에 보이는 문자열을 출력하도록 solution 함수를 작성해 주세요.

 

 

매개변수 설명

문구를 담은 문자열 phrases와 초를 담은 secondsolution 함수의 매개변수로 주어집니다.

* phrases"happy-birthday"입니다.

* second1 이상 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]    
728x90
반응형