일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- pytorch
- dfs
- 플로이드 와샬
- 조합론
- 백트래킹
- 알고리즘
- object detection
- NEXT
- 너비 우선 탐색
- 문자열
- 2023
- Overfitting
- 이분 탐색
- 우선 순위 큐
- tensorflow
- BFS
- c++
- DP
- 다익스트라
- back propagation
- 회고록
- 크루스칼
- lazy propagation
- 미래는_현재와_과거로
- 가끔은 말로
- 분할 정복
- 세그먼트 트리
- 가끔은_말로
- dropout
- 자바스크립트
Archives
- Today
- Total
Doby's Lab
백준 1337번: 올바른 배열 (C++) 본문
https://www.acmicpc.net/problem/1337
Level: Silver IV
Solved By: Implementation
처음에 정렬을 하여 인접한 원소들 간의 차를 활용한다면 규칙이 있을까 했는데 찾을수록 오류가 발견되어 직접 구현해보는 게 아이디어였습니다.
구현이 가능하였던 이유는 원소의 최대 개수가 50개이고, 한 원소당 5가지의 케이스를 고려하여서 시간초과를 면할 수 있기 때문입니다.
한 원소를 기준으로 해당 원소가 첫 번째에 있을 때를 생각하여 +1인 원소는 있는지 +2인 원소는 있는지...
혹은 두 번째에 있을 때를 생각하여 -1인 원소는 있는지 +1인 원소는 있는지...
이와 같이 5가지 모두를 고려한다면 답을 구할 수 있었습니다.
원소의 유무는 map을 이용하였습니다. m.find()를 사용하였을 때, 원소가 없다면 m.end() iterator를 반환하기 때문에 이 특성을 활용하여 조건을 만들어주었습니다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#define MAX 1e9
using namespace std;
int N;
vector<int> v;
map<int, bool> m;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for(int i = 0; i < N; i++){
int a; cin >> a;
m.insert({a, true});
v.push_back(a);
}
int res_cnt = 0;
for(auto t : v){
for(int k = -4; k <= 0; k++){
if(t + k < 0) continue; // 탐색하는 수 바운더리가 0 미만
if(t - k > MAX) continue;
int cnt = 0;
for(int i = t + k; i <= t + k + 4; i++){
if(m.find(i) != m.end()) cnt++;
}
res_cnt = max(res_cnt, cnt);
}
}
cout << 5 - res_cnt;
return 0;
}
728x90
'PS > BOJ' 카테고리의 다른 글
백준 11909번: 배열 탈출 (C++) (0) | 2023.06.20 |
---|---|
백준 1124번: 언더프라임 (C++) (0) | 2023.06.16 |
백준 1408번: 24 (C++) (0) | 2023.05.29 |
백준 1297번: TV 크기 (C++) (0) | 2023.05.29 |
백준 1051번: 숫자 정사각형 (C++) (0) | 2023.03.01 |