본문 바로가기

파이썬(문제풀이)

파이썬 최대값을 반환

더보기

순서가 없는 10개의 숫자가 공백으로 구분되어 주어진다, 주어진 숫자들 중 최대값을 반환하는 파이썬 여러가지 코딩

#1. max() 함수 사용 (가장 간단한 방법)

numbers_str = "10 5 20 8 15 30 25 3 12 18"
numbers_list = list(map(int, numbers_str.split()))
max_value = max(numbers_list)
print(max_value)

코드 분석

  1. numbers_str = "10 5 20 8 15 30 25 3 12 18"
    • 숫자들을 공백으로 구분한 문자열로 저장합니다.
  2. numbers_list = list(map(int, numbers_str.split()))
    • 이 줄이 코드의 핵심적인 부분입니다.
    • numbers_str.split(): split() 메소드는 문자열을 공백(' ')을 기준으로 나누어 문자열 요소들을 가진 리스트로 만듭니다.
      • "10 5 20 8..."는 ['10', '5', '20', '8', '15', '30', '25', '3', '12', '18']가 됩니다.
    • map(int, ...): map() 함수는 리스트의 각 요소에 int 함수(정수 변환)를 적용합니다. 즉, 각 문자열 요소를 정수로 바꿉니다.
      • map 객체에는 10, 5, 20, ...와 같은 정수들이 포함됩니다.
    • list(...): map 객체는 직접 리스트로 사용할 수 없으므로, list() 함수를 사용하여 최종적인 정수 리스트를 생성합니다.
      • 최종 결과: [10, 5, 20, 8, 15, 30, 25, 3, 12, 18]
  3. max_value = max(numbers_list)
    • 파이썬의 내장 함수인 max()를 사용하여 리스트 numbers_list에 있는 모든 요소들 중에서 가장 큰 값을 찾습니다.
    • 이 경우 30이 최대값이므로, max_value 변수에는 30이 할당됩니다.
  4. print(max_value)
    • max_value 변수에 저장된 값, 즉 30을 화면에 출력합니다.

결론

이 코드는 문자열로 된 숫자를 정수 리스트로 변환하고, 파이썬의 max() 함수를 활용하여 그 리스트에서 가장 큰 값을 효율적으로 찾는 과정을 보여줍니다. max() 함수를 사용하면 반복문을 직접 작성하지 않아도 되기 때문에 코드가 훨씬 간결해집니다.


#2. 반복문 사용 (기본적인 알고리즘)

numbers_str = "10 5 20 8 15 30 25 3 12 18"
numbers_list = list(map(int, numbers_str.split()))

max_value = numbers_list[0]  # 첫 번째 요소를 초기 최대값으로 설정
for number in numbers_list:
    if number > max_value:
        max_value = number
print(max_value)

코드 분석

  1. numbers_str = "10 5 20 8 15 30 25 3 12 18"
    • 숫자들을 공백으로 구분한 문자열로 변수에 저장합니다.
  2. numbers_list = list(map(int, numbers_str.split()))
    • 이 줄은 문자열을 정수 리스트로 변환하는 역할을 합니다.
    • numbers_str.split(): 문자열을 공백(' ') 기준으로 나눠서 ['10', '5', '20', ...]와 같은 문자열 리스트를 만듭니다.
    • map(int, ...): split() 결과로 나온 리스트의 각 문자열 요소를 **정수(integer)**로 변환합니다.
    • list(...): map 객체를 [10, 5, 20, ...]와 같은 최종적인 정수 리스트로 변환합니다.
  3. max_value = numbers_list[0]
    • max_value라는 변수에 리스트의 첫 번째 요소인 10을 초기 최대값으로 할당합니다. 이 값을 기준으로 나머지 숫자들과 비교하게 됩니다.
  4. for number in numbers_list:
    • numbers_list의 모든 요소에 대해 반복을 시작합니다. 각 반복마다 현재 요소는 number 변수에 할당됩니다.
  5. if number > max_value:
    • 현재 반복의 number가 현재까지의 최대값인 max_value보다 큰지 확인합니다.
    • 예를 들어, number가 20일 때, 20 > 10은 참(True)이 됩니다.
  6. max_value = number
    • 만약 if 조건이 참이면, max_value의 값을 현재 number의 값으로 업데이트합니다. 이제 max_value는 20이 됩니다. 이 과정은 리스트의 끝까지 반복되면서 max_value는 계속해서 가장 큰 값으로 갱신됩니다.
  7. print(max_value)
    • 반복문이 모두 끝난 후, 최종적으로 max_value에 저장된 **가장 큰 값인 30**을 출력합니다.

이 코드는 수동으로 최대값을 찾는 기본적인 알고리즘을 구현한 것으로, 파이썬의 내장 함수 max()와 동일한 결과를 내지만 내부적인 동작 원리를 이해하는 데 유용합니다.


#3. 정렬 후 마지막 요소 반환

numbers_str = "10 5 20 8 15 30 25 3 12 18"
numbers_list = list(map(int, numbers_str.split()))
numbers_list.sort() # 리스트를 오름차순으로 정렬
max_value = numbers_list[-1]
print(max_value)

코드 분석

  1. numbers_str = "10 5 20 8 15 30 25 3 12 18"
    • 공백으로 구분된 숫자들을 문자열 변수에 저장합니다.
  2. numbers_list = list(map(int, numbers_str.split()))
    • split()을 사용하여 문자열을 공백 기준으로 나눈 후, map(int, ...)를 통해 각 요소를 정수로 변환하여 정수 리스트를 만듭니다.
    • 결과: [10, 5, 20, 8, 15, 30, 25, 3, 12, 18]

3. numbers_list.sort()

  • sort() 메소드는 리스트를 제자리에서 오름차순으로 정렬합니다. 즉, 리스트의 내용 자체를 변경합니다.
  • 위 코드의 numbers_list는 정렬 후 [3, 5, 8, 10, 12, 15, 18, 20, 25, 30]로 바뀝니다.

4. max_value = numbers_list[-1]

  • 파이썬에서 음수 인덱스는 리스트의 뒤에서부터 요소를 가리킵니다.
  • [-1]은 리스트의 마지막 요소를 의미합니다. 오름차순으로 정렬된 리스트에서 마지막 요소는 가장 큰 값입니다.
  • 따라서 max_value에는 30이 할당됩니다.

5. print(max_value)

  • 변수 max_value에 저장된 값, 즉 30을 출력합니다.

이 방법은 리스트를 정렬하는 과정이 포함되어 있어, 앞서 제시된 max() 함수나 반복문을 사용하는 방법보다 연산 비용이 더 클 수 있습니다. 하지만 리스트를 정렬해야 하는 다른 작업이 필요한 경우에는 매우 효율적인 방법이 될 수 있습니다.