728x90
반응형
- 문제
- 잘못된 풀이
N, M = map(int, input().split())
num = list(input().split())
result = list()
for i in num[:-2]:
for j in num[1:-1]:
for k in num[2:]:
if i==j or j==k or i==j:
continue
# print(i, j, k)
if int(i)+int(j)+int(k) <= int(M):
result.append(int(i)+int(j)+int(k))
else:
break
print(max(result))
해당 문제는 N장의 카드에서 3장을 뽑아 더한 값이 M보다 작으면서 가장 큰 값을 구하는 문제이다.
나는 for문의 range를 잘못 설정하였다.
코드를 작성하기 전, 알고리즘을 손으로 구현하였을 때는 올바르게 작성하였지만 코드로 작성할 때 범위를 잘못 설정하였다.
j는 i보다 커야하고, k도 j보다 커야함을 간과하고 있었다.
i, j, k를 출력해서 확인해보니 뽑았던 카드를 또 뽑은 문제가 있었다.
따라서 i==j, j==k, i==k로 해결할 수 있다고 생각했지만 이것이 문제가 아니였다.
- 올바른 풀이
N, M = map(int, input().split())
lst = list(map(int, input().split()))
nlst = []
for i in range(N):
for j in range(i+1, N):
for k in range(j+1, N):
# print(lst[i],lst[j],lst[k])
three = lst[i] + lst[j] + lst[k]
if three > M:
continue
else:
nlst.append(three)
print(max(nlst))
따라서 나는 삼중 for문의 범위를 다음과 같이 알맞게 설정하였고, 문제를 해결할 수 있었다.
이번 문제는 어렵지 않아서, 빠른 시간 내에 문제점을 찾고 해결할 수 있었다.
728x90
'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글
[python] 19532. 수학은 비대면강의입니다. (0) | 2023.07.26 |
---|---|
[python] 2231. 분해합 (0) | 2023.07.25 |
[python] 1149. RGB거리 (0) | 2023.03.02 |
[python] 1912. 연속합 (0) | 2023.03.01 |
[python] 1904. 01타일 (0) | 2023.02.20 |