-
[BOJ] 1377 :: 버블 소트알고리즘/BOJ(C++) 2018. 7. 1. 15:49반응형
https://www.acmicpc.net/problem/1377
백준 풀고 점점 풀이올리기가 귀찮아지는데...
풀이올리면 나도 한번 다시 푸는 방법 복습하는 거니까 다시 열심히 올리려고한다!
우선 이 문제는 우리가 아는 평번한? 버블 소트 문제인데,
전체 크기인 N의 크기가 너무 커서 실제 버블 소트를 돌리면 TL이 뜬다.
그래서! 우리는 처음 들어왔을 때 수의 위치와 정렬 후 수의 위치를 비교해 가장 앞으로 많이 옮겨간 수가 몇칸 옮겨갔는지를 찾아주면 되는 문제이다!
이때 정렬할때 algorith 헤더파일에 들어있는 sort함수를 쓰면 nlogn에 정렬이 가능하다.
vector pair로 입력을 받아 first에는 수의 값 second에는 위치를 입력받으면 된다.
후에 first를 기준으로 sort하고 second값과 i번째 값들을 비교해 몇칸 이동했는지를 체크해주면 된다.
#include <iostream>
#include <vector>#include <algorithm>using namespace std;int main(){std::ios::sync_with_stdio(false);cin.tie(NULL);int n;cin >> n;vector<pair<int, int> > v;for (int i = 0; i < n; i++){int temp;cin >> temp;v.push_back(make_pair(temp, i));}sort(v.begin(), v.end());int ans = 0;for (int i = 0; i < n; i++){if (v[i].second - i > ans)ans = v[i].second - i;}cout << ans + 1 << '\n';}반응형'알고리즘 > BOJ(C++)' 카테고리의 다른 글
[BOJ] 14226 :: 이모티콘 (0) 2018.07.03 [BOJ] 9019 :: DSLR (0) 2018.07.02 [BOJ] 4963 :: 섬의 개수 (0) 2018.06.20 [BOJ] 1676 :: 팩토리얼 0의 개수 (0) 2018.06.19 [BOJ] 11653 :: 소인수분해 (0) 2018.06.19