문제
https://www.acmicpc.net/problem/2798
문제는 위 사이트를 참고해주세요.
풀이
N, M = map(int, input().split())
cardNum = list(map(int, input().split()))
tempList = []
for i in range(len(cardNum)-2):
for j in range(i+1, len(cardNum)-1):
for z in range(j+1, len(cardNum)):
total = cardNum[i] + cardNum[j] + cardNum[z]
if total <= M:
tempList.append(total)
if len(tempList) != 0:
print(max(tempList))
먼저 카드 수와 기준 값을 넣어줍니다.
그리고 N장의 카드를 입력받아 리스트에 넣어주니다.
총 3개의 for문이 있는데 5장의 카드가 있다고 가정했을 때
세 수를 중복없이 더하려면 첫 수는 가장 뒤에있는 수 두개를 빼주어야 하기때문에 범위를 -2를 해줍니다.
두 번째 수는 범위를 -1 해주고 시작 값을 첫 for문의 +1값으로 해줍니다.
세 번째 수는 범위를 그대로 리스트의 길이만큼 해주고, 시작 값을 두 번째 for문의 +1값으로 해줍니다.
그리고 if문으로 기준 값보다 작거나 같은 수만 tempList에 넣어주고
만약 tempList가 비워져있으면 아무것도 출력을 하지 않고
비워져있지 않다면 tempList에서 가장 큰 값을 출력해줍니다.
중간에 print를 넣어서 확인해보면
중복없이 제대로 더해지는 것을 볼 수 있습니다.
결과
'IT > 알고리즘' 카테고리의 다른 글
1일 N알고리즘 - #35 (0) | 2020.06.02 |
---|---|
1일 N알고리즘 - #34 (0) | 2020.06.01 |
1일 N알고리즘 - #32 (0) | 2020.05.31 |
1일 N알고리즘 - #31 (0) | 2020.05.28 |
1일 N알고리즘 - #30 (0) | 2020.05.28 |
댓글