Algorithm/백준

[BOJ] 2920 - 음계

비번변경 2022. 2. 3. 19:11

문제

https://www.acmicpc.net/problem/2920

다장조는 c d e f g a b C의 8 음계로 구성되어 있다. c는 1로, d는 2로, ..., C를 8로 변환한다고 했을 때 1부터 8까지 차례대로 연주하면 ascending을, 8부터 1까지 차례대로 연주하면 descending, 두 경우에 해당하지 않으면 mixed라고 하자.

연주한 순서를 입력받아, 해당 연주의 ascending/descending/mixed 여부를 판단하라.

 

풀이

내 풀이

1. 입력받은 값을 리스트에 저장한다.

2. mixed 여부를 확인하기 위한 플래그 변수를 False로 초기화한다.

3. 리스트의 처음 값과 그 다음 값을 비교하여, ascending으로 시작하는지 descending으로 시작하는지 확인하여, 그 값을 저장한다.

4. 리스트의 진행 방향이 달라지면 플래그 변수를 True로 바꾸고 반복문을 종료한다.

5. 플래그 변수가 True면 mixed를, False면 진행 방향에 따라 결과를 출력한다.

import sys

l = list(map(int, sys.stdin.readline().split()))
for i in range(len(l)-1):
    if i == 0:
        f = False
        d = "a" if l[i] < l[i+1] else "d"
    else:
        if (d == "a" and l[i] > l[i+1]) or (d == "d" and l[i] < l[i+1]):
            f = True
            break
print("mixed" if f == True else ("ascending" if d == "a" else "descending"))

 

다른 사람 풀이

딕셔너리를 사용하면 간단하게 문제를 해결할 수 있다.

 

방법

1. 12345678/87564321을 key로, ascending/descending을 value로 하는 딕셔너리를 선언한다.

2. 입력값에서 공백을 제거한 문자열을 키로 하여 딕셔너리에서 get 함수로 찾는다. 이때 12345678, 87564321 외의 key가 전달되면 mixed를 반환하도록 두 번째 매개변수 default 값을 mixed로 전달한다.

import sys

print({"12345678": "ascending", "87654321": "descending"}.get(sys.stdin.readline()[:-1:2], "mixed"))

 


딕셔너리의 get 함수에 기본값이 있다는 점을 기억할 것…….