문제
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
출력
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
아이디어
일단 기본적으로 스위치나 if else 등을 써서 시간이 오래 걸리게 하고 싶지 않았다.
기본적으로 처음에 맨 앞의 두가지 음계만 봐도 기초적으로 3가지 경우중 어떤 경우인지 알 수 있다.
따라서 그걸로 result를 먼저 해두고
만약 중간에 mixed가 감지되면 결과를 mixed로 변경했다.
그리고 맨 마지막에 result를 출력한다.
정답 코드
def solution():
melodys = list(map(int, input().split()))
flow = melodys[0] - melodys[1]
if flow * flow != 1:
# 애초에 맨 앞이 1씩 줄어들거나 커진게 아니라면 무조건 mixed이다.
return print("mixed")
result = "descending" if flow == 1 else "ascending"
for i in range(1, len(melodys)):
if melodys[i - 1] - melodys[i] != flow:
result = "mixed"
break
print(result)
solution()
'Study > Algorithms' 카테고리의 다른 글
백준 9498 시험 성적 (Python) (0) | 2024.05.30 |
---|---|
백준 8958: OX 퀴즈 (Python) (0) | 2024.05.30 |
백준 2884 : 알람 시계 (Python) (0) | 2024.05.30 |
백준 2753 : 윤년 (Python) (0) | 2024.05.30 |
프로그래머스 두 큐 합 같게 만들기 [JS] (0) | 2024.02.27 |