티스토리 뷰
728x90
[Python] 백준 문제풀이 - 음계(2920번)
서문
오늘은 백준 사이트 음계 ( 2920번 ) 문제풀이를 하겠습니다. 문제를 살펴보겠습니다. 😉
- 백준 문제 링크 : https://www.acmicpc.net/problem/2920
- 파이썬 튜터 사이트 : http://pythontutor.com/visualize.html#mode=display
1. 문제 설명
다장조는 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인지 판별하는 프로그램을 작성하시오.
2. 제한사항
없음
3. 입출력 예 설명
입력 | 출력 |
---|---|
1 2 3 4 5 6 7 8 | ascending |
8 7 6 5 4 3 2 1 | descending |
8 1 7 2 6 3 5 4 | mixed |
본문
요약
- 입력으로 8개 숫자가 제공된다.
- 입력된 8개 숫자가 오름차순인지, 내림차순인지, 믹스인지 판별해라.
문제풀이
코드
# 나의 풀이
lst = list(map(int,input().split()))
sort_lst = sorted(lst)
reversed_lst = sorted(lst,reverse=True)
if lst == sort_lst:
print("ascending")
elif lst == reversed_lst:
print("descending")
else:
print("mixed")
---
# 다른 분 풀이
lst = list(map(int,input().split()))
ascending = True
descending = True
for i in range(1,8):
if lst[i] > lst[i-1]:
decending = False
elif lst[i] < lst[i-1]:
ascending = False
if ascending:
print("ascending")
elif descending:
print("descending")
else:
print("mixed")
Detail Code Review
주어진 8개의 숫자가 내림차순인지 오름차순인지 둘 다 아닌지를 판단할 때 어떤 방법이 있을까?
우선 8개만 나오기 때문에 속도를 고려하지 않아도 된다.
- 주어진 8개 숫자의 오름차순과 내림차순을 변수에 저장한 후 이를 조건문을 통해 판별한다.
- 반복문을 돌면서 주어진 8개 숫자가 오름차순인지 내림차순인지 판별한다.
1번 풀이의 코드는
- 8개 입력을 리스트로 받는다.
- 리스트를 sorted함수를 통해 오름차순 리스트를 만든다.
- 리스트를 sorted함수를 통해 내림차순 리스트를 만든다.
- 만들어진 두개의 리스트를 처음에 입력받은 리스트와 비교하여 정답을 반환한다.
2번 풀이 코드는
- 8개 입력을 리스트로 받는다.
- ascending과 descending을 판별하기 위해 flag 변수를 만들어 true 값을 넣는다.
- for문을 돌면서
- 만약 앞의 수가 뒤의 수보다 크면 ascending이기 때문에 descending 변수를 false로 지정한다.
- 만약 앞의 수가 뒤의 수보다 작으면 descending이기 때문에 ascending 변수를 false로 지정한다.
- for문을 다 돌고 나온 값을 조건문으로 비교하여 정답을 반환한다.
- 만약 ascending이라면 ascending만 True 이기 때문에 if ascending:이 반환하고
- 만약 descending이라면 descending만 True 이기 때문에 if descending: 이 반환하고
- 둘 다 false라면 mixed를 반환한다.
혹시 문제가 있는 부분이 있으시면 말씀해주세요. 더 좋은 아이디어도 알려주시면 감사하겠습니다.😉
댓글