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 |
Tags
- 그래프
- HTTP
- SQL
- 분할 정복
- github action
- BFS
- 알고리즘
- Spring
- 컴퓨터 네트워크
- CI/CD
- 도커
- 다이나믹프로그래밍
- GIT
- 분할정복
- 브루트포스
- 그리드 알고리즘
- dfs
- AWS
- 이분탐색
- 트리
- 그리드
- 재귀
- 자바
- 역방향 반복자
- 백준
- 스프링
- 다이나믹 프로그래밍
- TCP
- 순열
- 자료구조
Archives
- Today
- Total
코딩성장스토리
백준 1377번: 버블 소트 본문
https://www.acmicpc.net/problem/1377
1377번: 버블 소트
첫째 줄에 N이 주어진다. N은 500,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 A[1]부터 A[N]까지 하나씩 주어진다. A에 들어있는 수는 1,000,000보다 작거나 같은 자연수 또는 0이다.
www.acmicpc.net
이 문제의 포인트는 버블 소트의 특징을 파악 하는 것이다.
첫번 째로 버블소트는 마지막부터 천천히 채워가는 형식이다.
그리고 뒤에 있던 값이 정렬된 배열의 위치로 가기 위해서는 항상 한칸씩 앞으로 이동하는 것이다.
즉 여기서말하는 몇 단계를 구하기 위해서는 한칸씩 앞으로 가서 본래 위치로 돌아가기 까지의 최대값을 구하면 되는 문제이다.
예를 들어
10 1 5 2 3 이 주어질때 10이 맨끝으로 가면서 그 앞에 있는 숫자들은 한칸씩 앞으로 간다.
1 5 2 3 10 그리고 5가 끝에서 두번째로 가면서 또 한칸씩 앞으로 간다.
1 2 3 5 10 즉 2,3은 앞으로 두칸씩 이동했고 2번 만에 정렬된것을 확인 할 수 있다.
이 코드를 짤 때에 핵심은 위치 값과 최대 값이다.
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
#include<string>
#define PI 3.1415926535
using namespace std;
int d[5000000];
int main()
{
int n;
cin >> n;
vector<pair<int, int>> a(n); //배열과 위치값을 저장하기 위한 pair
for (int i = 0; i < n; i++) {
cin >> a[i].first; //배열 값
a[i].second = i; //위치 값
}
sort(a.begin(), a.end());
int ans = 0;
for (int i = 0; i < n; i++) {
if (ans < a[i].second - i) //기존 위치 값에서 바뀐 위치를 뺴준 값
ans = a[i].second - i;
}
cout << ans;
return 0;
}
'백준 코딩' 카테고리의 다른 글
백준 11724번:연결 요소의 개수 (0) | 2021.10.01 |
---|---|
백준 1260번:DFS와 BFS (0) | 2021.10.01 |
백준 2579번 :계단 오르기( 다이나믹 프로그래밍) (0) | 2021.09.27 |
백준 18870번:좌표 압축 (0) | 2021.09.25 |
백준:10814번:나이순 정렬 (0) | 2021.09.25 |