본문 바로가기

Univ/Python Programming

[문제 11] 배열에서 두 수의 곱 출력하기 - Python 풀이

정수 배열이 주어지면 이 배열에서 가장 큰 두 수의 곱을 계산하는 프로그램을 작성한다. 배열의 크기는 0 이상 100 이하이다.

입력 예시

첫째 줄에 배열의 크기 N이 주어진다. 둘째 줄에 N개의 정수가 공백으로 구분되어 주어진다.

출력 예시

배열에서 가장 큰 두 수의 곱을 "Product: 값" 형식으로 출력한다.

예제 테스트케이스

예제 1

입력 예시
출력 예시
5
1 3 5 2 4
Product: 20

예제 2

입력 예시
출력 예시
2
7 8
Product: 56

정답 코드

N = int(input())

if N >= 2:
    arr = list(map(int, input().split()))
    arr.sort()
    product = arr[-1] * arr[-2]
    print(f"Product: {product}")

1. 코드 동작 설명

  • 정수 N을 입력받는다.
  • N이 2 이상인 경우에만 배열을 입력받는다.
  • 배열을 정렬하여 가장 큰 값들이 뒤로 가도록 만든다.
  • 마지막 두 원소를 선택하여 곱을 계산한다.
  • 결과를 출력 형식에 맞게 출력한다.

2. 문법 설명

int()

N = int(input())
  • 문자열을 정수로 변환하는 함수
  • 사용 형태:
int(문자열)

map()

map(int, input().split())
  • iterable의 각 요소에 함수를 적용
  • 사용 형태:
map(함수, iterable)

list()

list(map(int, input().split()))
  • iterable을 리스트로 변환
  • 사용 형태:
list(iterable)

sort()

arr.sort()
  • 리스트를 오름차순으로 정렬 (원본 변경)
  • 사용 형태:
리스트.sort()

인덱싱

arr[-1], arr[-2]
  • 뒤에서부터 요소 접근
  • -1은 마지막, -2는 뒤에서 두 번째

출력 (f-string)

print(f"Product: {product}")
  • 문자열 내부에 값을 삽입하여 출력
  • 사용 형태:
print(f"문자열 {변수}")

3. 실수 포인트 (핵심만)

N < 2인데 배열 처리하는 경우

arr = list(map(int, input().split()))
  • 두 수가 없으므로 문제 조건 성립 불가

정렬 없이 최대값 두 개 선택

max(arr) * second_max  # 잘못된 접근
  • 두 번째 최대값을 정확히 구하지 못할 수 있음

인덱스 잘못 사용

arr[0] * arr[1]
  • 정렬 후에도 가장 작은 값들이 선택될 수 있음

출력 형식 오류

product: 20
Product : 20
  • 문자열 형식이 정확히 일치하지 않으면 오답

4. 핵심 정리

  • 배열을 정렬한 뒤 마지막 두 값을 선택한다.
  • 음수 여부와 관계없이 정렬 기반 접근이 안전하다.