티스토리 뷰

반응형
 

2920번: 음계

다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8

www.acmicpc.net

 

풀이

 

소프티어에서 8단 변속기 문제와 완벽히 일치한다. 한 번 읽고 온다면 도움이 될 것이다.

 

https://softeer.ai/practice/6283

 

이 문제에서 요구하는 개념은 간단하다.

 

1. 8부터 1까지 반대로 나열할 수 있느냐?

2. 만약 나열이 가능하다면, 그 나열된 리스트들이 순서대로 되어 있는지 확인할 수 있느냐?

 

그렇기에 설명을 위해 풀어 쓴 코드는 다음과 같다.

 

a = list(map(int,input().split()))
b = [i for i in range(1,9)]
c = [i for i in range(8,0,-1)]
count=0
for i in range(8):
    if b[i]==int(a[i]):
        count+=1
    elif c[i]==int(a[i]):
        count-=1
if count==8:
    print('ascending')
elif count==-8:
    print('descending')
else:
    print('mixed')

 

중간에 카운트를 넣은 이유는, 만약에 8단 변속기가 아닌 9단이 주어졌을때, 혹은 100단이 주어졌을 때도 있을 수 있기 때문이다.

유지 보수 관점에서 함수를 짜는 행위인 것이다.

 

1등의 함수는 문제 풀이에 있어선 합리적이지만, 결코 실천되지는 못한다.

 

#1등의 함수
i = input()
if i == '1 2 3 4 5 6 7 8': print('ascending')
elif i == '8 7 6 5 4 3 2 1': print('descending')
else: print('mixed')

 

따라서 우리는 항상 모든 변수가 변할 것을 염려해두고 코드를 짜도록 하자.

반응형