반응형
리뷰
투포인터를 통해 해결한 문제
문제 풀이
- n, m을 입력받고 정수형 벡터를 n크기로 초기화 해준 후 각 인덱스에 값을 받아와 준다.
- 벡터를 정렬해 주고 투포인터에 벡터와 n, m값을 인자로 전해준다. (전역 변수를 사용해도 된다.)
- 왼쪽의 시작 인덱스는 0, 오른쪽의 시작 인덱스는 n-1로 왼쪽이 오른쪽보다 커지기 전까지 루프를 실행한다.
- 왼쪽과 오른쪽 인덱스의 값을 더해주고 m과 같다면 개수를 1개 찾은 것이다, 왼쪽 인덱스 + 1 오른쪽 인덱스 - 1
- 만약 값이 더 클경우 오른쪽 인덱스를 -1 해주고, 값이 더 작을경우 왼쪽을 +1 해주면 된다.
- 마지막으로 찾은 개수를 리턴해 준 뒤 출력해 준다.
참고 사항
전역 변수를 사용하면 더 편리할수도?
정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int twoPointer(vector<int>& lst, int n, int m) {
int left = 0, right = n - 1, cnt = 0;
while (left < right) {
int temp = lst[left] + lst[right];
if (temp == m) {
cnt++;
left++;
right--;
}
else if (temp > m) right--;
else left++;
}
return cnt;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> lst(n);
for (int i = 0; i < n; i++) {
cin >> lst[i];
}
sort(lst.begin(), lst.end());
int ans = twoPointer(lst, n, m);
cout << ans;
}
728x90
반응형
'알고리즘 공부 > C++' 카테고리의 다른 글
백준 10769번 행복한지 슬픈지 C++ (0) | 2024.07.25 |
---|---|
백준 5347번 LCM C++ (3) | 2024.07.22 |
백준 1159번 농구 경기 C++ (0) | 2024.07.21 |
백준 1076번 저항 C++ (0) | 2024.07.21 |
백준 11091번 알파벳 전부 쓰기 C++ (0) | 2024.07.21 |