티스토리 뷰

Code/BackJoon

백준 2920: 음계 [Python]

Tree._.River 2022. 1. 26. 20:16

2920

 

2920번: 음계

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

www.acmicpc.net

내가 작성한 코드

N = input().split()
result = []
for i in range(1, 8):
    check = int(N[i]) - int((N[i-1]))
    if abs(check) == 1:
        result.append(check)
    else:
        result.append(0)

if result.count(1) == 7:
    print('ascending')
elif result.count(-1) == 7:
    print('descending')
else:
    print('mixed')

 

* 풀이 

- 첫 접근 방식

  1. 배열 현재값과 이전값의 차가 1일 경우 연속된 값이다.

  2. 절대값이 1일 경우 (1, -1)  result 배열에 추가한다.

  3. result 배열의 값 1, -1, 0 에 따라 다른 값을 출력한다.

 

- 접근 방식의 문제점

  1. map 함수를 사용

     ㄴ 반복문을 통해 정수로 변환하지 않아도 된다.

          int(N[i]) - int((N[i-1])) 

     ㄴ map 함수는 리스트의 요소를 지정된 함수로 처리해준다. 원본은 변경하지 않고 새 리스트를 생성한다.

          · list(map(함수, 리스트))

          · tuple(map(함수, 튜플))

          list(map(int, input().split()))

   2. 절대값으로 비교하지 않아도 된다. 오름차순 정렬, 내림차순 정렬 가능하다.

          오름차순 정렬 : sorted(N)

          내림차순 정렬 : sorted(N, reverse=True)

          ·sorted()

           ㄴ 기존의 리스트를 변경하는 것이 아닌 정렬의 새로운 리스트를 반환

       

 

* 짧은 코드

N = list(map(int, input().split()))

if N == sorted(N):
    print('ascending')
elif N == sorted(N, reverse=True):
    print('descending')
else:
    print('mixed')

댓글