[프로그래머스] Lv2 최댓값과 최솟값 (Python)

마뇽미뇽·6일 전

알고리즘 문제풀이

목록 보기
171/171
post-thumbnail

문제 링크: 프로그래머스 - 최댓값과 최솟값
알고리즘 분류: #문자열 #정렬


1. 문제 설명

공백으로 구분된 숫자들이 담긴 문자열 s가 주어질 때, 이 숫자들 중 최솟값최댓값을 찾아 "(최솟값) (최댓값)" 형태의 문자열을 반환하는 문제입니다.

  • 문자열 s = "1 2 3 4" 이면 "1 4"를 반환합니다.
  • 음수가 포함된 s = "-1 -2 -3 -4" 이면 "-4 -1"을 반환합니다.

2. 문제 접근 및 풀이 전략

문자열 상태로는 크기 비교를 정확하게 할 수 없으므로, 공백을 기준으로 분리한 뒤 정수형(int)으로 변환하여 정렬하는 것이 핵심입니다.

  • 문자열 분리 (split): 공백을 기준으로 문자열을 잘라 각 숫자 형태의 문자열을 분리합니다.
  • 데이터 타입 변환 (map): 분리된 문자열 배열을 정수형(int) 데이터로 변환합니다. 정수형으로 바꿔야 음수와 자릿수가 다른 수의 크기를 올바르게 비교할 수 있습니다.
  • 정렬 (sorted): 오름차순으로 정렬하면 배열의 첫 번째 원소([0])가 최솟값, 마지막 원소([-1])가 최댓값이 됩니다.
  • 결과 문자열 조합: 정렬된 결과에서 최솟값과 최댓값을 다시 문자열(str)로 변환한 뒤 공백과 함께 조합하여 반환합니다.

3. 정답 코드 (Python)

def solution(s):
    answer = ''
    # 공백으로 자른 뒤 정수로 변환하고 오름차순 정렬
    array = sorted(map(int, s.split()))
    
    # 정렬된 배열의 맨 앞(최솟값)과 맨 뒤(최댓값)를 뽑아 문자열로 조합
    answer += str(array[0]) + ' ' + str(array[-1])
    return answer

4. 효율성 및 복잡도 분석

  • 시간 복잡도: O(NlogN)O(N \log N)
    • 문자열을 쪼개고 정수로 변환하는 데 문자열 내 단어 개수 NN만큼인 O(N)O(N)이 걸립니다.
    • 파이썬의 sorted() 함수는 Timsort 알고리즘을 사용하여 O(NlogN)O(N \log N)의 시간 복잡도를 가집니다.
    • 결과적으로 정렬 연산이 지배적이므로 전체 시간 복잡도는 O(NlogN)O(N \log N)입니다.

5. 깔끔한 한 줄 요약

파이썬의 내장 함수인 split, map, sorted를 적재적소에 조합하면 단 세 줄로도 명확하고 가독성 높은 코드를 작성할 수 있음을 보여주는 문제였습니다.

profile
Que sera, sera

0개의 댓글