[Python Algorithm] 백준알고리즘 10817번 파이썬 풀이

2019. 6. 24. 03:04Python/ㄴ Algorithm

Problem


Introduction


해당 문제에서 요구하는 바는 첫째줄에 공백을 기준으로 세 정수가 입력되면 각 변수 a, b, c에 정수를 입력받고 세 수 중 두번째로 큰 정수를 출력하는 프로그램을 작성하는것이다.

Solve


a, b, c = input().split()
a = int(a); b = int(b); c = int(c)
max_ = max(a, b, c)
min_ = min(a, b, c)
print(a + b + c - max_ - min_)

완성된 코드는 위와 같다. 다른 언어의 경우 이 문제를 푸는데 파이썬보다는 어려울것이다. 다만 파이썬에서는 min함수와 max함수를 이용해서 비교적 쉽게 해결할 수 있다.

사실 이부분에 대해서 많이 고민했다. 먼저 왜 알고리즘문제를 푸는가에 대해 생각해보면 다양한 환경과 상황에서의 코드작성능력을 향상시키는데 있다. 그래서 min, max 함수를 사용하지 않고 풀이를 써볼까도 했었으나 사실 우리가 파이썬을 선택한 이유는 무엇인가? 빠르고 편리한 프로그래밍을 위해서이다 따라서 이 글에서는 min, max함수를 이용하기로 판단했음을 미리 알린다.

a, b, c = input().split()

우선 해당 코드를 통해 각 a, b, c변수에 input함수를 이용해 값을 입력받고 split함수를 이용해 공백을 기준으로 문자열을 잘라 저장한다.

a = int(a); b = int(b); c = int(c)

그리고 바로 위의 코드를 통해 각 a, b, c변수들의 자료형을 문자형 자료형에서 정수형 자료형으로 형변환을 해준 뒤 다시 저장한다.

위의 과정이 끝났다면 위에서 설명했듯 min함수와 max함수를 이용해서 수열중 가장 큰 수와 가장 작은수를 구해야한다.
min함수는 min(number1, number2, number3)등 함수에 정수형 데이터가 인자로 주어지면 그중 가장 작은 숫자를 반환하는 함수이다. max함수는 min함수와 비슷하나 min함수와는 반대로 수열중 가장 큰 숫자를 반환해준다.

아래 코드를 살펴보자.

max_ = max(a, b, c)
min_ = min(a, b, c)

우선 max_라는 변수에 a, b, c변수중 가장 큰 변수를 저장한다.
그리고 min_이라는 변수에 a, b, c변수중 가장 작은 변수를 저장한다.

세 수 중 가장 큰 수와 작은 수를 구하였지만, 문제에서 요구하는 바는 두번째로 큰(작은) 즉 중간의 수를 구하는것이 목표이다.

print(a + b + c - max_ - min_)

중간값을 구하기 위해서는 위 코드를 사용하면 된다.
우선 a, b, c 세 변수를 모두 더한 값에서 가장 큰 변수, 가장 작은 변수를 빼주면 된다.

세 변수의 합 - 가장 큰 변수의 값 - 가장 작은 변수의 값 = 두번째로 큰(작은) 값

이렇게 파이썬의 내장 함수인 min함수와 max함수를 이용하면 해당 문제를 쉽게 풀 수 있다.

이렇게 간결하게 문제를 해결할 수 있다는것이 파이썬의 큰 매력이 아닌가싶다.

Result


input값이 20, 30, 10일 경우 실행결과는 아래와 같다.

20 30 10
20