문제 링크: 프로그래머스 - 최댓값과 최솟값
알고리즘 분류: #문자열 #정렬
공백으로 구분된 숫자들이 담긴 문자열 s가 주어질 때, 이 숫자들 중 최솟값과 최댓값을 찾아 "(최솟값) (최댓값)" 형태의 문자열을 반환하는 문제입니다.
s = "1 2 3 4" 이면 "1 4"를 반환합니다.s = "-1 -2 -3 -4" 이면 "-4 -1"을 반환합니다.문자열 상태로는 크기 비교를 정확하게 할 수 없으므로, 공백을 기준으로 분리한 뒤 정수형(int)으로 변환하여 정렬하는 것이 핵심입니다.
split): 공백을 기준으로 문자열을 잘라 각 숫자 형태의 문자열을 분리합니다.map): 분리된 문자열 배열을 정수형(int) 데이터로 변환합니다. 정수형으로 바꿔야 음수와 자릿수가 다른 수의 크기를 올바르게 비교할 수 있습니다.sorted): 오름차순으로 정렬하면 배열의 첫 번째 원소([0])가 최솟값, 마지막 원소([-1])가 최댓값이 됩니다.str)로 변환한 뒤 공백과 함께 조합하여 반환합니다.def solution(s):
answer = ''
# 공백으로 자른 뒤 정수로 변환하고 오름차순 정렬
array = sorted(map(int, s.split()))
# 정렬된 배열의 맨 앞(최솟값)과 맨 뒤(최댓값)를 뽑아 문자열로 조합
answer += str(array[0]) + ' ' + str(array[-1])
return answer
sorted() 함수는 Timsort 알고리즘을 사용하여 의 시간 복잡도를 가집니다.파이썬의 내장 함수인
split,map,sorted를 적재적소에 조합하면 단 세 줄로도 명확하고 가독성 높은 코드를 작성할 수 있음을 보여주는 문제였습니다.