알고리즘 공부/C++

백준 1940번 주몽 C++ 투 포인터

마달랭 2024. 7. 22. 23:06
반응형

리뷰

투포인터를 통해 해결한 문제

 

문제 풀이

  1. n, m을 입력받고 정수형 벡터를 n크기로 초기화 해준 후 각 인덱스에 값을 받아와 준다.
  2. 벡터를 정렬해 주고 투포인터에 벡터와 n, m값을 인자로 전해준다. (전역 변수를 사용해도 된다.)
  3. 왼쪽의 시작 인덱스는 0, 오른쪽의 시작 인덱스는 n-1로 왼쪽이 오른쪽보다 커지기 전까지 루프를 실행한다.
  4. 왼쪽과 오른쪽 인덱스의 값을 더해주고 m과 같다면 개수를 1개 찾은 것이다, 왼쪽 인덱스 + 1 오른쪽 인덱스 - 1
  5. 만약 값이 더 클경우 오른쪽 인덱스를 -1 해주고, 값이 더 작을경우 왼쪽을 +1 해주면 된다.
  6. 마지막으로 찾은 개수를 리턴해 준 뒤 출력해 준다.

 

참고 사항

전역 변수를 사용하면 더 편리할수도?

 

 

정답 코드

#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