BOJ 2798. 블랙잭 (Python)
2021. 2. 10. 12:15ㆍProblem Solving/BOJ
BOJ 2798. 블랙잭
https://www.acmicpc.net/problem/2798
Logic
포문을 세번 돌려서 브루트-포스로도 풀 수는 있지만 효율적이지 않으니 패스.
나는 투포인터 로 풀었다.
- 입력받은
nums
리스트를 오름차순으로 정렬한다.(중요한 작업) - 0~N-2 까지 for문을 돌린다.
- left포인터는 i번째 바로 다음, right포인터는 끝을 가리킨다.
- left < right인 동안 sum이 M보다 크면 right포인터를 1 감소시켜 sum을 작게 만들도록 한다. sum이 M보다 작으면
max_sum
을 갱신하고 left포인터를 증가시켜 sum을 크게 만든다. - 이때 sum이 M과 같으면 프린트 해버리고 종료시킨다.
- 모든 경우의 수를 검사하고 나서 max_sum을 print한다.(max_sum이 M이여서 강제 종료 된 경우 빼고)
Solution
import sys
N, M = map(int,(sys.stdin.readline().strip().split()))
nums = list(map(int, sys.stdin.readline().strip().split()))
max_sum = 0
nums.sort()
for i in range(0, N-2):
left = i + 1
right = len(nums) - 1
while left < right:
sum = nums[i] + nums[left] + nums[right]
if sum < M:
max_sum = max(max_sum, sum)
left += 1
elif sum > M:
right -= 1
else:
print(M)
sys.exit(0)
print(max_sum)
sys.exit(0)
while문을 두번 빠져나오게 할 수 없어 사용했다. sys.exit(1)
도 종료는 되지만 비정상적인 종료로 인해서 "런타임에러(NZEC)"(not zero exit code) 를 뿜게 되니 sys.exit(0)
을 쓰면 된다.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
BOJ 1018. 체스판 다시 칠하기 (Python) (0) | 2021.02.10 |
---|---|
BOJ 11050. 이항계수 1 (Python) (0) | 2021.02.10 |
BOJ 1259. 팰린드롬 수 (Python) (0) | 2021.02.10 |
BOJ 10250. ACM 호텔 (Python) (0) | 2021.02.10 |
BOJ 1085. 직사각형에서 탈출 (Python) (0) | 2021.02.09 |