Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- programmers
- join
- Dynamic Programming
- 프로그래머스
- bfs
- 소프티어
- 동적계획법
- dfs
- 깊이 우선 탐색
- DP
- Lv. 3
- Lv. 0
- Python
- 파이썬
- SQL
- Lv. 2
- 자바스크립트
- SQL 고득점 KIT
- javascript
- level 3
- group by
- select
- 너비 우선 탐색
- 오블완
- Lv. 1
- LEVEL 2
- C언어
- Java
- 티스토리챌린지
- softeer
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
Softeer level3 [21년 재직자 대회 본선] 코딩 테스트 세트 Python 본문
문제 링크 : https://softeer.ai/practice/info.do?idx=1&eid=630
정답 코드
import sys
input = sys.stdin.readline
N, T = map(int, input().split())
def check(value):
now = confirmed_level[0]
for idx in range(N-1):
if now >= value:
now = confirmed_level[idx+1] + neutral_level[idx]
elif now + neutral_level[idx] >= value:
now = confirmed_level[idx+1] + (now + neutral_level[idx] - value)
else:
return False
if now >= value:
return True
else:
return False
def binarySearch(start, end):
if start == end:
return start
mid = (start + end + 1) // 2
if check(mid):
return binarySearch(mid, end)
else:
return binarySearch(start, mid-1)
for tc in range(T):
confirmed_level = [0 for _ in range(N)]
neutral_level = [0 for _ in range(N-1)]
scenario = list(map(int, input().split()))
for idx in range(N-1):
confirmed_level[idx] = scenario[2*idx]
neutral_level[idx] = scenario[2*idx + 1]
confirmed_level[N-1] = scenario[-1]
print(binarySearch(0, 2*10**12))
어려운점
1. 이진법에 대해서 먼저 떠오르긴 했다. 하지만 start값과 end값을 어떻게 설정할지 고민이었다.
2. 이진탐색에 check라는 함수를 또 만들어야 했는데 아직 이해가 제대로 되지 않았다.
느낀점
- 무조건 다시 풀어보고 이진탐색에 대해 공부해야겠다.
'알고리즘' 카테고리의 다른 글
Softeer level3 조립라인 Python (2) | 2023.08.27 |
---|---|
Softeer level3 [21년 재직자 대회 예선] 좌석 관리 Python (0) | 2023.08.26 |
Softeer level3 [HSAT 3회 정기 코딩 인증평가 기출] 플레이페어 암호 Python (2) | 2023.08.21 |
Softeer level3 스마트 물류 Python (0) | 2023.08.07 |
Softeer level3 택배 마스터 광우 Python (0) | 2023.08.04 |