SWEA()/Intermediate_Learn

[SWEA]4828. 파이썬 SW문제해결 기본 - LIST 1 : min max

코딩의행복 2021. 10. 17. 10:00

파이썬 SW문제해결 기본 - LIST 1

06 min max(SW문제)


이미지를 클릭하시면 SW Expert Academy의 해당 강좌로 이동합니다

 

06. Min Max

🎲문제 : 위 이미지를 클릭하여 SWEA 이동 -> 6차시 1일차 - min max


🥾문제 접근:

- 주어진 입력을 List에 담아 내장 함수 max(), min()을 이용하여 해결하는 방법이 있다.

    📍 max(iterable) : 반복 가능한 자료형을 입력받아 최댓값을 return한다.

    📍 min(iterable) : 반복 가능한 자료형을 입력받아 최솟값을 return한다.

- 가장 간단한 해결 방법이면서 앞서 배운 List를 활용할 수 있다.

List란? - [SWEA]파이썬 SW문제해결 기본 - LIST 1 : 알고리즘, 리스트

 

[SWEA]파이썬 SW문제해결 기본 - LIST 1 : 알고리즘, 리스트

파이썬 SW문제해결 기본 - LIST 1 01 알고리즘 02 리스트 01. 알고리즘 ① 알고리즘 개요 ▣ 알고리즘이란? - 유한한 단계를 통해 문제를 해결하기 위한 절차나 방법 ▣ 알고리즘 표현법 - 슈도 코드 :

taewow.tistory.com


🎯 문제 해결:
(최종 코드는 제일 하단 참고)


첫 번째 시도

T = int(input())
for test_case in range(1, T + 1):
    #1
    input()
    #2
    lst_temp = list(map(int, input().split(" ")))
    #3
    result = max(lst_temp) - min(lst_temp)
    
    print(f"#{test_case} {result}")

#1 양수의 개수 N을 input()을 통해 입력받았다. 그러나 이 알고리즘에서 N을 사용하지 않으므로 따로 변수에 저장하지 않았다. (5 ≤ N ≤ 1000)

#2 N개의 양수 ai가 주어지는 입력을 input()을 통해 한번에 받았다. 입력받은 값은 정수가 아닌 문자열 타입이다. 따라서 map(function, iterable, ...) 을 통해 정수로 변환 후 list([iterable])로 리스트 타입으로 변환했다. 이 과정을 순서대로 표현하면 다음과 같다.

1. ex) 입력 값 123 234 345 456이라고 가정
2. input() -> "123 234 345 456"을 입력 받는다. 이때 타입은 문자열이다.
3. input().split(" ") -> " "(space)를 기준으로 나눈 후 리스트로 저장한다. 즉 ["123", "234", "345", "456"]이 된다. 타입은 리스트이고 각 요소의 타입은 문자열이다.
4. map(int, input().split(" ")) -> 리스트 내 요소에 int()를 적용시킨다. 즉 문자열 요소가 정수형 요소로 바뀌며 타입은 map타입이 된다.
5. list(map(int, input().split(" "))) -> map 타입을 다시 list 타입으로 변환한다. 결과는 [123, 234, 345, 456]이 된다.

#3 입력받은 리스트에서 문제의 정답을 얻기 위해 최댓값에서 최솟값을 뺀 후 result 변수에 저장한다.

이 코드의 결과는? - ✅PASS


두 번째 시도

첫 번째 코드의 통과로 그대로 마칠 수도 있다. 그러나 개선사항으로 N개의 양수 ai를 입력받는 부분이 눈에 띄었다. 리스트의 요소를 변경할 필요가 없다. 그러므로 List보다 효율이 더 좋은, 그러나 요소를 변경할 수 없는 Tuple 형식을 쓰는게 어떨까 생각했다. 큰 효율은 없을 수 있지만... 그래도 시도해보았다.

T = int(input())
for test_case in range(1, T + 1):
    input()
    lst_temp = tuple(map(int, input().split(" ")))
    result = max(lst_temp) - min(lst_temp)
    print(f"#{test_case} {result}")

이 코드의 결과는? - ✅PASS

 

max(), min()과 같은 내부 함수들은 파이썬의 편리함을 더욱 빛나게 한다. 사실 이 문제를 C++이나 Java로 해결하려고 했다면 라이브러리를 쓰지 않는 한 최댓값과 최솟값을 구하는 함수를 따로 제작했어야 할 것이다. 그러나 그렇게 어려운 문제는 아닌 관계로, 또 파이썬에서 제공하는 기능들에 익숙해지자는 취지로 최댓값 최솟값 함수는 따로 구현하지 않았다. 혹시나 최댓값 최솟값 구하는 방법이 명쾌하게 떠오르지 않는다면 직접 구현해보는 것을 추천한다.