[문제]
다장조는 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인지 판별하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/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
🎨 풀이
💡 전체 코드
import sys
num = list(map(int,sys.stdin.readline().split()))
result = 'mixed'
if num[0] == 1 :
answer = 1
result = 'ascending'
for i in range(len(num)):
if num[i] != answer :
result = 'mixed'
break
answer += 1
elif num[0] == 8 :
answer = 8
result = 'descending'
for i in range(len(num)):
if num[i] != answer:
result = 'mixed'
break
answer -= 1
print(result)
> 핵심 : 정렬 후 가운데 수를 출력
🍦 코드 설명 (실행 순서대로 나열)
# main
num = list(map(int,sys.stdin.readline().split()))
result = 'mixed'
1. num을 입력받는다.
2. result를 mixed로 초기화해둔다.
- 일단 mixed로 적어두고 나중에 바꿔주려고 한다.
if num[0] == 1 :
answer = 1
result = 'ascending'
for i in range(len(num)):
if num[i] != answer :
result = 'mixed'
break
answer += 1
3. 만약 num[0]이 1이라면, 4번과 5번을 실행한다.
- 이 음계는 1 2 3 ... 8 인 오름차순이여야한다.
4. answer에 1을 넣고, result는 asceding으로 바꾼다.
5. 음계와 answer을 하나씩 비교해본다.
만약 다르다면 result에 mixed를 넣고 for문을 끝내고,
만약 같다면 answer에 +1 을 한 후, for문을 이어서 진행한다.
elif num[0] == 8 :
answer = 8
result = 'descending'
for i in range(len(num)):
if num[i] != answer:
result = 'mixed'
break
answer -= 1
6. 만약 num[0]이 8이라면, 7번과 8번을 실행한다. (위와 방법은 같음)
- 이 음계는 내림차순이여야함.
7. answer에 8을 넣고, result는 'descending'으로 바꾼다.
8. 음계와 answer을 하나씩 비교해본다.
만약 다르다면 result를 mixed로 바꾸고, for문을 끝낸다.
만약 같다면 answer에 -1을 한 후, for문을 이어서 진행한다.
print(result)
9. result를 출력한다.

끝~
⭐ 느낀점
> 뭔가 answer 없어도 비교를 할 수 있지 않을까 싶긴 했는데.. 방법이 생각이 안나서 answer 변수를 썼다. ㅠㅠ 조금 아쉬움이 남긴 하넴
'🎲 알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 2576번 - 홀수 (파이썬) (0) | 2022.08.28 |
---|---|
[백준] 1924번 - 2007년 (파이썬) (0) | 2022.08.26 |
[백준] 10988번 - 팰린드롬인지 확인하기 (파이썬) (0) | 2022.08.23 |
[백준] 2441번 - 별 찍기 4 (파이썬) (0) | 2022.08.22 |
[백준] 10817번 - 세 수 (파이썬) (0) | 2022.08.21 |