Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 타겟넘버
- 5강클로저
- 두원사이의정수쌍
- 백준알고리즘
- DP
- div2개
- Lv2
- 우박수열정적분
- 이중지도
- 정렬
- [pccp 기출문제]
- JS스터디
- 프로그래머스
- 스택
- 알고리즘 문제풀이
- JS
- 과제진행하기
- React.StrictMode
- solved.ac골드
- solved.ac플래티넘
- 비트마스크
- pccp기출문제
- 코어자바스크립트
- 2023카카오블라인드코테
- 백준 알고리즘
- c++
- 지도 여러개
- 최소스패닝트리
- Lv3
- 알고리즘문제풀이
Archives
- Today
- Total
호지
[백준 알고리즘] 1071번 소트 c++ 본문
a[i]+1 이 a[i+1]이 아닌 정렬 중 사전 순이 가장 빠른 결과를 출력하는 문제이다.
사전 순이 가장 빨라야 하므로 오름차순 정렬을 진행한다.
v[i]+1이 v[i+1]일 때, 2가지의 경우를 확인하면 된다.
1. v[i+1] 값과 v[n-1] 값이 같은 경우, v[i]값을 가지는 원소 중 가장 작은 index를 가지는 값과 v[i+1]를 swap한다.
(두 원소의 값 차이는 1이므로 v[start+1] ++, v[i+1] --로 swap을 진행함)
ex) 111222-> 211122 -> 221112 -> 222111
2. v[i+1]값과 다른 값은 가지는 원소중 가장 작은 index를 가지는 값과 v[i+1]를 swap한다.
ex) 1233334... -> 1243333....
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> v(n);
int input;
for(int i=0; i<n; i++){
cin >> v[i];
}
sort(v.begin(), v.end());
for(int i=0; i<n; i++){
if(v[i]+1 == v[i+1]){
int end = i+2;
if(end != n){
while(v[end] == v[i+1])
end++;
}
if(end == n){
int start = i-1;
if(start >= 0){
while(v[start] == v[i])
start--;
}
v[start+1] ++;
v[i+1] --;
}
else{
int tmp = v[end];
v[end] = v[i+1];
v[i+1] = tmp;
}
}
}
for(int i=0; i<n; i++){
cout << v[i] << " ";
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 1016번 제곱 ㄴㄴ수 c++ (0) | 2022.04.05 |
---|---|
[백준 알고리즘] 1086번 박성원 c++ (0) | 2022.04.04 |
[백준 알고리즘] 1050번 물약 c++ (0) | 2022.04.01 |
[백준 알고리즘] 1047번 울타리 c++ (0) | 2022.03.30 |
[백준 알고리즘] 1028번 다이아몬드 광산 C++ (0) | 2022.03.30 |
Comments