본문 바로가기
Algorithm/알고리즘 문제풀이

오늘의 알고리즘(4월2일)

by devraphy 2021. 4. 2.

1. 백준 2920번, 음계 

 

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


2. 생각해보자

  • 리스트에서 원소를 차례대로 비교하여 오름차순 / 내림차순을 판단한다. 
  • 내림차순과 오름차순을 판별할 수 있는 기준 값이 필요하다.
    ex) 오름차순 = True, 내림차순 = False 라면 오름차순
    ex) 오름차순 = False, 내림차순 = False 라면 혼합차순 
    ex) 오름차순 = False, 내림차순 = True 라면 내림차순 

 

 

 

 

잠깐!!! 정답을 보기 전에

  • 무조건 코드로 구현해야 한다는 강박에서 벗어나자.
  • 노트에 간단하게라도 어떤 식으로 이 문제를 해결할지 생각해보자.
  • 나의 생각을, 로직을 글로 적어보자.
  • 풀이와 코드분석을 보고 이해했다면, 직접 코드를 적어보는 연습을 하자. 

 


3. 풀이 및 코드분석

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')

 

 

 

코드 분석

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

# input().split('구분자'): 공백을 구분자로 사용하여, 입력받은 값을 나눈다. 
# map(자료형, 입력값): 입력값 또는 매개변수(parameter)를 원하는 자료형으로 변경한다. 
# list(): 리스트 자료구조에 담는다. 

 

 

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
        
# 총 8개의 입력값을 받기 때문에 원소의 개수는 총 8개다. 
# for문에서 index 1번부터 시작하는 이유는 비교를 편하기 하기 위함이다.
# 예를들어, a[1] > a[0]인 경우, 오름차순이기 때문에 descending을 False로 바꾼다. 
# a[1] > a[0]인 경우, 내림차순이기 때문에 ascending을 False로 바꾼다. 

 

 

if ascending:
    print('ascending')
elif descending:
    print('descending')
else:
    print('mixed')
    
# for문을 완료한 시점에서 ascending과 descending의 값에 따라 다른 문자열을 출력한다. 
# ascending과 descending이 모두 False인 경우, 혼합차순을 의미하는 mixed를 출력한다. 

 


4. 주요 메소드

map

- map은 어떤 함수를 이용하여 매개변수를 일괄처리하기 위해 사용되는 함수이다.

- 쉽게 말해서, 모든 요소(매개변수)에 어떤 함수를 일괄적으로 적용하기 위하여 for문을 돌리는 것이라고 생각하자.  

 

기본적인 구조는 다음과 같다. 

 

map(함수, 매개변수) 

 

- 여기서 함수는 매개변수에 적용할 함수이며, 매개변수는 일괄처리를 할 대상이다. 

- 실제로 위의 문제에서 적용한 것을 분석해보자. 

 

map(int, input().split(' '))

 

- 위의 코드는 입력값을 split(' ')을 사용하여 나눈 뒤, 각 요소들의 데이터 타입을 int형으로 변환하는 것을 의미한다.  

댓글