문제
정답 코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector <int> input_ar;
int main()
{
cin.tie(0);
ios :: sync_with_stdio(0);
int n,m,input;
int cnt =0;
cin >> n >> m;
for (int i=0;i <n;i++)
{
cin >> input;
input_ar.push_back(input);
}
sort(input_ar.begin(), input_ar.end());
for (int i =0; i < n;i++)
{
for (int j=n-1;j > i;j--)
{
if (input_ar[j] + input_ar[i] == m)
cnt++;
else if (input_ar[j] +input_ar[i] < m)
break;
}
}
cout << cnt;
}
문제 풀이의 흐름
절대 어려운 문제가 아니다 꼭 천천히 읽자!
- 배열에 다 입력을 받는다
- 배열을 정렬한다.
- 가장 작은 값과 가장 큰 뒤의 값을 더해본다.
- 만약 더한값이 찾는 값보다 더 작다면 다음으로 작은 값과 가장 큰 값을 비교한다.
- 만약 더한값이 찾는 값보다 크다면 다음으로 큰 값으로 당겨서 본다.
- 이 과정을 계속 반복한다.
주의 할 점
필자는 이 문제가 2개를 선택하는게 아니라 임의의 숫자를 선택해서 문제를 푸는 것으로 보고 계속해서 틀렸다.
반드시 2개임을 기억하고 꼭 정렬을 해야하는 것을 기억하자. 물론 이 문제는 난이도가 낮아서 투포인터를 대충 구현해도 맞긴 하던데 난이도가 올라가면 조금 더 정교히 할 필요가 있다.
그리고 이게 중복이 있다고 착각할 수 있는데 그림을 그려가며 푸는 것이 좋다.
반성 및 고찰
필자는 너무 오랬동안 문제를 잘못 봤다. 그래서 오답을 엄청 많이냈다.
누적 합을 사용해서 풀려고 했는데 너무 미련한 방법이었다.
다음부터는 조금 더 천천히 문제를 읽고 분석한 다음 코드를 짜는 것이 훨씬 더 시간을 아끼는 길임을 기억하자.
급하게 하려다가 오히려 더 망한다는 것을 기억하자.
부끄럽다.
Uploaded by N2T
728x90
'알고리즘 > 백준-실버' 카테고리의 다른 글
백준 1929번 곱셈(C++) (0) | 2023.01.02 |
---|---|
백준 3986번 좋은단어 (C++)(부제 맞왜틀..) (0) | 2023.01.02 |
백준 1213번 팰린드롬 만들기(C++) (0) | 2022.12.30 |
백준 9375번 패션왕 신해빈(C++) (0) | 2022.12.30 |
백준 1620번 나는야 포켓몬 마스터 이다솜(C++) (0) | 2022.12.30 |