-
[백준 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로 나오도록 하는 코드이다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스 스택/큐] 주식가격 (0) 2020.08.07 [백준 2798 /python] 블랙잭 (0) 2020.08.07 [프로그래머스 SQL 테스트] SELECT (0) 2020.08.06 [프로그래머스 level2] 포켓몬 - python (0) 2020.07.13 [프로그래머스 코딩테스트] K번째수 (Python) (0) 2020.07.12