문제
https://www.acmicpc.net/problem/26091
26091번: 현대모비스 소프트웨어 아카데미
첫째 줄에 견학을 희망하는 학회원의 수 $N$과 견학하는 팀의 최소 능력치를 나타내는 정수 $M$이 공백으로 구분되어 주어진다. ($1 \le N \le 100\,000$, $1 \le M \le 10^9$) 둘째 줄에 학회원 $N$명의 능력치
www.acmicpc.net
문제 요약
현대모비스에서 소프트웨어 아카데미 견학생 팀을 모집한다.
조건 1. 팀원이 두명이다.조건 2. 팀의 능력치가 M이상이다. 팀의 능력치는 모든 팀원의 능력치를 합한 값이다.
N명의 학회원들 중 견학을 보낼 수 있는 최대 팀 수를 출력한다.
코드
N, M = map(int, input().split())
arr = sorted(list(map(int, input().split())))
s = 0
e = N - 1
cnt = 0
while s < e:
if arr[s] + arr[e] >= M:
cnt += 1
s += 1
e -= 1
else:
s += 1
print(cnt)
코드 설명
1. 입력 받은 학회원들의 능력치를 저장한 배열을 정렬한다. (투 포인터 방식을 사용하기 위해)
2. s(start) 포인터가 e(end) 포인터를 앞질러가기전까지 탐색한다.
3. 두 포인터가 가리키는 값의 합이 M이상이면 s는 1 증가, e는 1 감소시키고 cnt를 1 증가시킨다.
+ 한 번 견학을 갈 팀을 구성한 학회원은 다시 팀을 짤 수 없으므로 두 포인터 모두 이동시킨다.
4. 두 포인터가 가리키는 값의 합이 M보다 작다면, s만 증가시킨다. (두 값의 합을 증가시키기 위해)
5. 탐색이 종료되면 cnt를 출력한다.
'Algorithm Problems > 투 포인터' 카테고리의 다른 글
[백준/Python] 2470번: 두 용액 (1) | 2023.11.08 |
---|---|
[백준/Python] 1644번: 소수의 연속합 (2) | 2023.11.07 |
[백준/Python] 3151번: 합이 0 (0) | 2023.09.23 |
[백준/Python] 3273번: 두 수의 합 (0) | 2023.09.18 |
[백준/python] 1806번: 부분합 (2) | 2023.08.18 |