All Articles

백준 Online Judge - 2920번 음계

백준 Online Judge 2920번 음계

문제

다장조는 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 중 하나를 출력한다.

예제 입력 1

1 2 3 4 5 6 7 8

예제 출력 1

ascending

예제 입력 2

8 7 6 5 4 3 2 1

예제 출력 2

descending

예제 입력 3

8 1 7 2 6 3 5 4

예제 출력 3

mixed

내 풀이

melody_list = list(map(int, input().split()))
ascending_list = [1, 2, 3, 4, 5, 6, 7, 8]
descending_list = [8, 7, 6, 5, 4, 3, 2, 1]
if melody_list == ascending_list:
  print("ascending")
elif melody_list == descending_list:
  print("descending")
else:
  print("mixed")

문제를 너무 납작하게 만들긴 했다. 오름차순, 내림차순이라고 해도 경우의 수가 딱 1개씩만 있길래 낼름 날로 먹었다. 출제자는 이걸 노린 게 아니지 않을까…

Refactoring? 이라기 보다는 출제 의도를 고려한 풀이…?

melody_list = list(map(int, input().split()))
ascending = True
descending = True

for idx in range(len(melody_list)-1):
  if melody_list[idx] > melody_list[idx+1]:
    ascending = False
  elif melody_list[idx] < melody_list[idx+1]:
    descending = False

if ascending:
  print("ascending")
elif descending:
  print("descending")
else:
  print("mixed")