ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 2920] 음계 - python3
    코딩테스트 2020. 7. 13. 17:54

    문제

    다장조는 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인지 판별하는 프로그램을 작성하시오.

    내가 푼 코드

    a=list(map(int, input().split(' ')))
    
    s = ['c','d','e','f','g','a', 'b','C']
    xs = list()
    for i in a:
        xs.append(a[i-1])
    
    if a == xs:
        print('ascending')
    elif list(reversed(s)) == xs:
        print('descending')
    else:
        print('mixed')
    

    1. 입력받기

     

    map은 리스트의 요소를 지정된 함수로 처리해주는 함수입니다.

    (map은 원본 리스트를 변경하지 않고 새 리스트를 생성합니다).

    • list(map(함수, 리스트))
    • tuple(map(함수, 튜플))

    2. 리스트 s에 알파벳값 미리 세팅

    3. 입력받은 숫자를 인덱스 값으로 사용해서 s의 원소들에 접근.

    4. s와 xs를 비교 후 출력. 

    이 떄 입력받은 리스트 s를 역순으로 변환하고 입력받은 xs와 비교했을 떄 같으면 descending.

     

     

    다른사람의 풀이

    a = list(map(int, input().split(' ')))
    
    ascending = True
    descending = True
    
    for i in range(1, len(a)):
        if a[i-1] < a[i]:
            descending = False
        elif a[i-1] > a[i]:
            ascending = False
    
    if ascending:
        print('ascending')
    elif descending:
        print('descending')
    else:
        print('mixed')
    
    

    1 5 4 2 3 7 8 6 라는 입력이 주어졌다고 가정했을 때,

    앞의 숫자와 뒤의 숫자를 비교해서 모든 결과가 앞자리보다 뒷자리가 클 경우 ascending이 True

    모든 원소의 뒷자리가 앞자리보다 크면 decending이 True로 나오도록 하는 코드이다.

Designed by Tistory.