상세 컨텐츠

본문 제목

[프로그래머스 풀이]: Lv.0 / 최댓값 만들기 (1)

파이썬 코딩테스트

by Corn/sec 2025. 2. 4. 15:08

본문

작성: Corn/sec, ChatGPT, 편집: Corn/sec

문제 링크 🔗  프로그래머스 - 최댓값 만들기 (1)

1. 문제 소개

프로그래머스 '최댓값 만들기 (2)' 문제는 주어진 리스트에서 가장 큰 두 숫자를 찾아 곱하는 문제입니다. 간단해 보이지만, 리스트 정렬을 어떻게 활용하느냐에 따라 풀이 방식이 달라질 수 있습니다.


 

2. 기본 풀이: sorted() 함수 활용

🔹 코드 구현

# 최대값을 만든다 = 가장 큰 두 수를 선택해서, 곱한다.
def solution(numbers):
    max_num = sorted(numbers)[::-1]  # 내림차순 정렬
    return max_num[0] * max_num[1]  # 가장 큰 두 수 곱하기

🔹 설명

  1. sorted(numbers): 리스트를 오름차순으로 정렬합니다.
  2. [::-1]: 리스트를 뒤집어서 내림차순 정렬합니다.
  3. max_num[0] * max_num[1]: 가장 큰 두 숫자를 곱해서 반환합니다.

🔹 sorted() 함수 특징

  • sorted()새로운 정렬된 리스트를 반환합니다. (원본 리스트는 변하지 않음)
  • reverse=True를 사용하면 바로 내림차순 정렬 가능합니다.
  • sorted(numbers, reverse=True) # 내림차순 정렬

 

3. 다른 풀이: list.sort() 활용

🔹 코드 구현

def solution(numbers):
    numbers.sort()  # 리스트 자체를 정렬
    return numbers[-2] * numbers[-1]  # 가장 큰 두 수 곱하기

🔹 설명

  1. numbers.sort(): 리스트를 오름차순 정렬 (원본 리스트가 변경됨)
  2. numbers[-2] * numbers[-1]: 정렬된 리스트에서 뒤에서 두 개의 숫자를 선택하여 곱함

🔹 list.sort() 함수 특징

  • 리스트 자체를 정렬하며, 반환값이 None입니다.
  • 원본 리스트가 변경되므로 메모리 사용을 절약할 수 있습니다.

 

4. sorted() vs sort() 차이점 정리

구분 sorted(list) list.sort()
원본 리스트 변경 여부 ❌ 변경되지 않음 ✅ 원본 리스트 변경
반환값 정렬된 새로운 리스트 반환 None (리스트 자체 정렬)
사용법 sorted(numbers, reverse=True) numbers.sort(reverse=True)
메모리 사용 새로운 리스트를 생성 (메모리 추가 사용) 리스트 자체를 정렬 (메모리 절약)

🔹 예제 코드 비교

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]

# sorted() 사용
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # [1, 1, 2, 3, 4, 5, 5, 6, 9]
print(numbers)  # 원본 리스트 변경 없음: [3, 1, 4, 1, 5, 9, 2, 6, 5]

# sort() 사용
numbers.sort()
print(numbers)  # 원본 리스트 변경됨: [1, 1, 2, 3, 4, 5, 5, 6, 9]

 


 

5. 최적의 선택은?

상황 추천 정렬 방식
원본 리스트를 유지해야 함 sorted() 사용
메모리를 아껴야 하고 원본 변경 가능 sort() 사용
내림차순 정렬이 필요함 sorted(numbers, reverse=True) or numbers.sort(reverse=True)

문제 상황에 따라 sorted()sort() 중 적절한 방식을 선택하면 효율적인 코드 작성이 가능합니다! 🚀

 


 

6. 그 외 다른 풀이: pop() 활용

🔹 코드 구현

def solution(numbers):
    num1 = 0
    num2 = 0
    answer = 0

    numbers.sort()

    num1 = numbers.pop()
    num2 = numbers.pop()
    answer = num1 * num2

    return answer

🔹 설명

  1. numbers.sort(): 리스트를 오름차순 정렬합니다.
  2. numbers.pop(): 리스트의 마지막 요소(가장 큰 값)를 꺼내서 num1에 저장합니다.
  3. numbers.pop(): 다시 리스트의 마지막 요소(두 번째로 큰 값)를 꺼내서 num2에 저장합니다.
  4. num1 * num2: 가장 큰 두 수를 곱한 결과를 반환합니다.

🔹 pop()을 활용한 방식의 특징

  • pop()을 사용하면 리스트의 마지막 요소를 제거하면서 반환하므로 메모리를 추가로 사용하지 않고도 값을 가져올 수 있습니다.
  • sort()와 조합하면 가장 큰 두 숫자를 효과적으로 선택할 수 있습니다.

 

7. 데이터프레임(DataFrame)의 정렬 방식이 궁금하다면?

[Python] 데이터프레임(DataFrame)의 정렬 방식

관련글 더보기