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
- 에라토스테네스의 체
- BFS
- 구현
- DFS
- 브루트포스
- 재귀
- 백트래킹
- 그리디
- join
- DP
- 그래프 이론
- MST
- 수학
- 투포인터
- 다이나믹 프로그래밍
- 서브쿼리
- 우선순위큐
- 시뮬레이션
- 누적합
- 다익스트라
- 자료구조
- 다시
- 분할정복
- 해시
- 크루스칼
- 플로이드-워셜
- GROUP BY
- 다이나믹프로그래밍
- 트리
- 그래프 탐색
Archives
- Today
- Total
기록하고 까먹지 말기
1940 본문
날짜 : 2023. 05. 28
사용 언어 : python
문제
코드
import sys
n = int(sys.stdin.readline()) # 재료의 개수
m = int(sys.stdin.readline()) # 갑옷 제작 필요 개수
a = list(map(int, sys.stdin.readline().split()))
a.sort(reverse=True) # 내림차순 정렬
res = 0
s, e = 0, n-1
while s < e:
if a[s] >= m: # 1개만으로 m값 넘김
s += 1 # 줄이기
continue
if a[s] + a[e] == m: # 제작 가능
res += 1
s += 1
e -= 1
continue
elif a[s] + a[e] > m: # 합쳐서 넘기는 경우
s += 1
else:
e -= 1
print(res)
풀이
- n, m값과 각 갑옷의 value를 입력받은 다음 값옷을 내림차순으로 정렬한다.
- 그 다음 해당 갑옷들의 시작과 끝을 설정할 인덱스 s, e를 생성 후 이진탐색 방식으로 탐색한다.
- 1개 자체의 값의 m보다 큰 경우에는 다음 케이스로 넘어가고,
- 합했을 때 m과 동일한 경우 s는 +1, e는 -1을 실행한다.(각각의 갑옷의 값은 줄어들고, 늘어난다.)
- 제작 불가능한 경우(값이 못미치는 경우)에는 e값을 줄여서 합을 늘리고, 반대의 경우에는 s값을 늘려서 값을 줄여나간다.
알게된 점
-
참고 사이트
-