| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- BFS
- dfs
- 다이나믹 프로그래밍
- kotlin
- Stack
- lv2
- c++
- 코틀린
- 2018 KAKAO BLIND RECRUITMENT
- level3
- 임베디드
- 이분탐색
- 다이나믹프로그래밍
- 동적계획법
- 구현
- 그리디
- 누적합
- 프로그래머스
- C
- 컴퓨터비전
- 컴퓨터 비전
- level2
- java
- dp
- cpp
- 통신 인터페이스
- 자바
- 우선순위큐
- 백준
- JavaScript
Archives
- Today
- Total
코드를 느껴바라
2295번 : 세 수의 합 [C++] 본문
문제 링크
성공 여부(걸린 시간): 성공 (36분 13초)
아이디어
이 문제는 이분탐색 또는 투포인터로 풀 수 있는 문제였는데 나는 문제를 보고
이분탐색에 대해서는 생각이 안났고 투포인터로 풀 수 있겠다고 생각해서 투포인터로 풀게 되었다.
우선 간단하게 생각하면 x, y, z 번째 수의 합으로 k번째 존재하는 수를 만들어낼 수 있다면 그의 최대값을 구하는 것이다.
처음에는 여러 방법에 대해서 생각하고 시간복잡도를 고려해보았다.
1. 세 수를 전부 정해놓고 탐색 (완전탐색)
- 방법: x, y, z를 전부 고정하고 가능한지 확인
- 반복문 3중 → O(N³)
- N이 1000이면
→ 1000³ = 10억 번 연산
→ 시간초과 확정
👉 현실적으로 불가능한 방법
2. 두 수를 정하고 나머지를 투포인터
- x, y 고정 → O(N²)
- z와 k를 투포인터로 조정 → O(N)
- 전체 → O(N³)
투포인터를 써도
결국 바깥이 이중 반복이면 전체는 여전히 세 겹 구조라서
👉 근본적으로 N³이라서 시간초과 위험
3. k를 큰 값부터 줄이면서 탐색 (현재 코드)
- k를 N번 탐색 → O(N)
- x를 0~k까지 → O(N)
- y, z를 투포인터 → O(N)
그래서 전체는 여전히
O(N³)
그런데 차이점은 👇
- 가장 큰 k부터 찾음
- 조건 만족하면 즉시 종료
- 평균적으로는 빨리 끝날 가능성 있음
👉 이론상은 N³
👉 하지만 최적화 + 조기 종료 덕분에 통과 가능성 있음
그래서 난 세번째 방법으로 코드를 작성했고 성공했다.
풀이 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N;
cin >> N;
vector<int> set_u(N, 0);
for (int i = 0; i < N; i++) {
cin >> set_u[i];
}
sort(set_u.begin(), set_u.end());
for (int k = N - 1; k >= 0; k--) {
for (int x = 0; x <= k; x++) {
int y = x;
int z = k;
while (y <= z) {
int sum = set_u[x] + set_u[y] + set_u[z];
if (sum == set_u[k]) {
cout << sum;
return 0;
}
else if (sum < set_u[k]) {
y++;
}
else {
z--;
}
}
}
}
cout << set_u[answer];
return 0;
}반응형
'PS > 백준(Baekjoon)' 카테고리의 다른 글
| 2473번 : 세 용액 [C++] (4) | 2026.01.30 |
|---|---|
| [보안] 자동차 사이버보안 트렌드, ISO/SAE 21432 (0) | 2026.01.28 |
| 32867번 : 피아노 [C++] (0) | 2026.01.15 |
| 1300번 : K번째 수 [C++] (0) | 2026.01.15 |
| 17144번 : 미세먼지 안녕! [C++] (4) | 2026.01.11 |
