BOJ : 음계 [2920]

재현·2021년 1월 30일
0

분류 : 구현, 배열

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

출처 : https://www.acmicpc.net/problem/2920

2. 아이디어


  • 다음 숫자와 현재 숫자의 차이 구하기

mine

  • string값으로 구분
    1. ascending
      • 다음 숫자 - 현재 숫자 = 1
    2. descending
      • 다음 숫자 - 현재 숫자 = -1
    3. mixed
      • 1, 2번이 아닐 경우

ndb

  • boolean값으로 구분

    mine과 동일

3. 코드


mine

a = [int(x) for x in input().split()]
result = "ascending"
for i in range(len(a)-1):
  if a[i+1]-a[i] == 1: # 오름차순
    result = "ascending"
  elif a[i+1]-a[i] == -1: # 내림차순
    result = "descending"
  else: # 혼합
    result = "mixed"
    break # 한 번이라도 혼합이면 루프 탈출
print(result)

출처 : https://github.com/Gitgorithm/wogus0333_Github/blob/main/BOJ/BOJ_2920.py

ndb

a = list(map(int, input().split(' ')))

ascending = True
descending = True

for i in range(1, 8):
    if a[i] > a[i - 1]:
        descending = False
    elif a[i] < a[i - 1]:
        ascending = False

if ascending:
    print('ascending')
elif descending:
    print('descending')
else:
    print('mixed')

출처 : https://github.com/ndb796/Fast_Campus_Algorithm_Lecture_Notes/blob/master/Notes/%5B01%5D%20CHAPTER%2001.%20%EA%B8%B0%EB%B3%B8%20%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%20-%20%EA%B8%B0%EC%B4%88%20%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4.pdf

4. 개선 사항


mine = 68ms
ndb = 64ms

profile
성장형 프로그래머

0개의 댓글