https://www.acmicpc.net/problem/20300
20300번: 서강근육맨
PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다.
www.acmicpc.net
이 문제는 반례가 하나밖에 없어서 테스트 하기가 어렵다
대충 만든 반례를 추가하자면
10
20 50 51 52 53 60 100 90 1000 60
1020
1
1
1
4
1 40 41 42
81
5
1 20 50 70 71
71
정도가 되겠다
풀이 코드
#정렬을 하고 1부터 n//2 까지 앞부터, 뒤부터 값을 더하고 가장 큰 숫자
n = int(input())
m = list(map(lambda x:int(x), input().split()))
m.sort() #정렬
if n == 1 : # n이 1이면 그대로 출력
print(m[0])
elif n % 2 == 0 : #n이 홀수인 경우
tmp = 0
for i in range(0,n//2) : #n//2까지 합 중 가장 큰 숫자
k = m[i] + m[-i-1]
if tmp < k :
tmp = k
print(tmp)
else :
tmp = 0
for i in range(0,(n-1)//2) : #맨 마지막 제외 n//2까지의 합 중 가장 큰 숫자
k = m[i] + m[-i-2]
if tmp < k :
tmp = k
print(max(tmp,m[-1])) # 마지막 숫자와 합을 비교해서 더 큰 숫자 출력
문제 풀이는 어렵지 않다
먼저 숫자를 정렬 한 이후
짝수의 경우
시작과 끝부터의 i 번째 숫자를 n//2 번까지 하나씩 더해서 가장 큰 숫자를 구해 출력하면 되고
홀수의 경우
시작부터 i 번째 숫자와 끝부터 i+1 번째 숫자를 n//2 번까지 더해서 가장 큰 숫자를 구하고 해당 숫자를 맨 마지막 숫자와 비교해서 더 큰 숫자를 출력하면 된다
'코딩 > 백준' 카테고리의 다른 글
백준 20365번 블로그2 파이썬 코드 + 풀이 (0) | 2023.11.09 |
---|---|
백준 14916번 거스름돈 파이썬 코드 + 풀이 (0) | 2023.11.09 |
백준 1920번 수 찾기 파이썬 문제 풀이 (0) | 2023.11.04 |
백준 2839번 설탕 배달 파이썬 코드+풀이 (0) | 2023.11.04 |
백준 1744번 수 묶기 파이썬 코드+ 풀이 (0) | 2023.11.04 |