728x90
반응형
🔗문제 링크
https://www.acmicpc.net/problem/1940
1940번: 주몽
첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고
www.acmicpc.net
👩💻코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
int M;
vector<int> numbers(N,0);
cin >> N;
cin >> M;
for (int i=0; i<N; i++){
int number;
cin >> number;
numbers.push_back(number);
}
sort(numbers.begin(), numbers.end());
int start_index = 0;
int end_index = N-1;
int count = 0;
while (start_index < end_index){
int sum = numbers[start_index] + numbers[end_index];
if(sum == M){
count++;
start_index++;
end_index--;
}else if(sum < M){
start_index++;
}else{
end_index--;
}
}
cout << count << "\n";
}
✏️풀이
Do it! 알고리즘 코딩테스트 - C++ 편 : 기출 유형 분석부터 문제 풀이 비법까지!를 참고하였습니다.
이전 문제에서의 풀이법과 동일하게 투 포인터라는 알고리즘을 사용합니다.
먼저 투 포인터로 비교할 수 있도록 주어진 재료들 값을 오름차순으로 정렬해줍니다.
정렬 후 start_index는 앞에서부터, end_index는 뒤에서부터 위치합니다.
두 포인터의 합이 m보다 작거나 크면 start_index를 하나 뒤로 옮기거나 end_index를 하나 앞으로 옮깁니다.
정답인 경우는 두개의 포인터를 모두 움직입니다.
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 12891번 : DNA 비밀번호 (0) | 2024.09.05 |
---|---|
[백준] 1253번 : 좋다 (1) | 2024.03.04 |
[백준] 2018번 : 수들의 합 5 (2) | 2024.02.29 |
[백준] 10986번 : 나머지 합 (1) | 2024.02.09 |
[백준] 11660번 : 구간 합 구하기 5 (2) | 2024.02.06 |