| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 도메인 주도 개발
- 구글 로그인
- jwt
- spring websocket nginx 설정
- 스프링부트
- CustomException
- GoormIDE
- validation
- wss 연결 실패
- fastapi
- 패러다임 불일치
- AWS
- 자바 orm
- Flask
- 백준 10815 # 백준 Java
- logout
- session
- 예외 처리
- presigned url
- @Valid
- S3
- ec2 nginx websocket reverse proxy
- oauth2.0
- 이미지 업로드
- 소셜 로그인
- 관점 지향 프로그래밍
- 개발 프로젝트
- springboot
- spring boot
- OpenAI API
Archives
- Today
- Total
개발세발은 안되요
[C++] 백준 2230 : 수 고르기 본문
문제
https://www.acmicpc.net/problem/2230
풀이
이 문제에서는 배열의 크기가 최대 10,000 이기 때문에 이중 for문을 이용하여 O(N^2)의 복잡도로 구현하면 시간 초과가 날 수 있다. 따라서 투포인터를 이용하여 구현한다.
- 오름차순(내림차순도 상관 없음)으로 입력 배열 정렬, ans(=최솟값) INF 로 초기화
- start = 0, end = 0
- arr[end] - arr[start] < M : end++
- arr[end] - arr[start] >= M : start++, ans 갱신
- 최종 ans 출력
위의 과정을 코드로 구현하면 된다.
그런데 사실 완전탐색에 가깝게 구현해도 통과가 되긴 한다. 뭔가 테스트케이스가 섬세하지 못하게..? 짜여있는 것 같기도 하다. (통과 안 할 줄 알고 이중 for문으로 구현한 코드를 돌렸는데 통과된다.)
코드 - 투포인터
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, ans = 2000000000;
int arr[100001];
int main() {
cin >> n >> m;
for(int i=0; i<n; i++){
cin >> arr[i];
}
// 오름차순 정렬
sort(arr, arr+n);
int start = 0, end = 0;
while(end < n){
// 차이 계산
int d = arr[end] -arr[start];
// 차이가 M 이상인 경우,
if(d >= m){
// 현재의 차이가 최솟값인 경우, 최솟값(ans) 갱신
if(d <ans){
ans = d;
}
// start 증가
start++;
}
// 차이가 M보다 작은 경우, end 증가(차이를 늘려야 함)
else{
end++;
}
}
cout << ans << "\n";
return 0;
}
코드 - 이중 for 문 이용
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, ans = 2000000000;
int arr[100001];
int main() {
cin >> n >> m;
for(int i=0; i<n; i++){
cin >> arr[i];
}
// 오름차순 정렬
sort(arr, arr+n);
for(int i=n-1; i>=1; i--){
for(int j= i-1; j>=0; j--){
int d = arr[i] - arr[j];
if(d >=m){
if(d < ans) {
ans = d;
}
break;
}
}
}
cout << ans << "\n";
return 0;
}
추가로, 각각 돌렸을 때 결과는 다음과 같다. 아래가 이중 for문, 위가 투포인터 이용한 코드의 결과이다. (시간 차이~)

'알고리즘 > 백준' 카테고리의 다른 글
| [C++] 백준 14502 : 연구소 (1) | 2025.08.17 |
|---|---|
| [C++] 백준 1806 : 부분합 (3) | 2025.08.15 |
| [C++] 백준 7562 : 나이트 (1) | 2025.08.15 |
| [C++] 백준 2294 : 동전 2 (2) | 2025.08.10 |
| [C++] 백준 21317 : 징검다리 건너기 (3) | 2025.08.05 |