본문 바로가기
알고리즘 문제풀이/백준

백준 2798

by Hoseok 2023. 3. 31.
728x90
반응형

 

첫 번째 시도한 코드(실패)

import sys

n, m = map(int, sys.stdin.readline().split())
c = list(map(int, sys.stdin.readline().split()))

result = []
result2 = []

for i in range(n - 2):
  for j in range(i + 1, n - 1):
    for k in range(j + 1, n):
      result.append(sum([c[i], c[j], c[k]]))

x = len(result)

for i in range(x):
  result2.append(abs(m - result[i]))  

index = result2.index(min(result2))

print(result[index])

 

반례


예를 들어, 입력값이 다음과 같을 때

3 10
1 2 3


이 경우, 첫 번째 for 루프에서 i는 0, j는 1, k는 2일 때 result 리스트에 c[0] + c[1] + c[2] = 6을 추가한다. 

따라서 result 리스트는 [6]이 된다.

다음으로, 두 번째 for 루프에서 result2 리스트를 계산. m이 10이므로, result2 리스트는 [4]가 된다.

마지막으로, result2 리스트에서 최솟값의 인덱스를 찾기 위해 index = result2.index(min(result2))를 실행. 이 때, result2 리스트에는 하나의 값만 존재하므로 인덱스 0이 반환.

따라서, print(result[index])는 print(result[0])과 동일. 하지만 result 리스트에는 6 하나만 들어있으므로, 정답은 6이 되어야 하지만 이 코드는 3을 출력. 

 

원인

 

올바른 결과는 6이어야 하지만, 코드가 3을 출력한 이유.

첫 번째 for 루프에서 result 리스트에는 [6]이 추가. 이후, 두 번째 for 루프에서 result2 리스트에는 [4]가 추가. 따라서, index = result2.index(min(result2))를 실행하면 index는 0이 된다.

마지막으로, print(result[index])를 실행하면 print(result[0])와 동일해지며, 따라서 3이 출력. 하지만 result[0]은 6이어야 올바른 결과.

 

정렬을 적용한 두 번째 코드(실패)

import sys

n, m = map(int, sys.stdin.readline().split())
c = list(map(int, sys.stdin.readline().split()))

result = []
result2 = []

c.sort()

print(c)

for i in range(n - 2):
  for j in range(i + 1, n - 1):
    for k in range(j + 1, n):
      result.append(sum([c[i], c[j], c[k]]))

x = len(result)

for i in range(x):
  result2.append(abs(m - result[i]))

index = result2.index(min(result2))

print(result[index])

 

최종 답안

import sys

n, m = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))

# 현재까지의 최댓값
max_sum = 0

# 3개의 카드를 고르는 모든 경우의 수에 대해 합을 구하고 최댓값을 갱신
for i in range(n - 2):
    for j in range(i + 1, n - 1):
        for k in range(j + 1, n):
            current_sum = cards[i] + cards[j] + cards[k]
            if current_sum <= m:
                max_sum = max(max_sum, current_sum)

print(max_sum)
728x90
반응형

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

백준 2667  (0) 2023.04.05
백준 14888  (0) 2023.04.04
백준 2661  (0) 2023.04.01
백준 14889  (0) 2023.04.01
백준 10819  (0) 2023.03.31