정렬 됐는지 안 됐는지 판단 하는 건 최소값이랑 최대값으로 확인할 수 있다.
이 개념 응용해서 풀었다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
using namespace std;
using i64 = long long;
int main() {
int n;
scanf("%d", &n);
vector<int> v(n+1);
vector<int> s(n+1);
for (int i = 1; i <= n; i++)
{
scanf("%d", &v[i]);
s[i] = v[i];
}
sort(s.begin(), s.end());
int group = 0;
int start_idx = s[1];
int min, max;
for (int i = 1; i <= n; i++)
{
if (start_idx == s[i])
{
min = v[i];
max = v[i];
}
if (min == start_idx && max == s[i])
{
group++;
start_idx = s[i+1];
}
else
{
if (max < s[i])
{
max = s[i];
}
if (s[i] < min)
{
min = s[i];
}
}
}
cout << group;
return 0;
}
음.. 하지만 틀렸다..
이 문제에서 틀렸는데 당연히 500개라 짤려서 돌리지는 못하고..
보니 두 번째에 큰 수가 있는 경우가 문제인 것 같다.
오 찾았다
원래라면 1이 나와야 할텐데 2가 나왔다
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
using namespace std;
using i64 = long long;
int main() {
int n;
scanf("%d", &n);
vector<int> v(n+1);
vector<int> s(n+1);
for (int i = 1; i <= n; i++)
{
scanf("%d", &v[i]);
s[i] = v[i];
}
sort(s.begin(), s.end());
for (int i = 1; i <= n; i++)
{
printf("%d ", s[i]);
}
printf("\n");
int group = 0;
int start_idx = s[1];
bool is_start = true;
int min, max;
for (int i = 1; i <= n; i++)
{
if (is_start)
{
printf("%d\n", i);
min = v[i];
max = v[i];
is_start = false;
}
// printf("i: %d, min %d, max : %d\n", i, min, max);
if (max < v[i])
{
max = v[i];
}
if (v[i] < min)
{
min = v[i];
}
if (min == start_idx && max == s[i])
{
printf("== : %d\n", i);
//printf("i: %d, min %d, max : %d\n\n", i, min, max);
group++;
start_idx = s[i+1];
is_start = true;
}
//printf("i: %d, min %d, max : %d\n\n", i, min, max);
}
cout << group;
return 0;
}
악 안되겠다
왜이리 뇌가 안 굴러가는지 모르겠다
내일 끝내야지
엇...
앗...
단순히 최소 최대 비교했는데 그러면 안되겠다.
로직부터 다시 생각해봐야 할듯
ㅋㅋㅋㅋ 아 제발 머리 좀 쓰자!
어제 머리 안 굴리면서 엘레레 거리며 풀다가 오늘 집중해서 20분 만에 풀었음..
현타온다 왜 뇌를 안 쓸까
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
using namespace std;
using i64 = long long;
int main() {
int n;
scanf("%d", &n);
vector<pair<int, int>> v(n+1);
for (int i = 1; i <= n; i++)
{
scanf("%d", &v[i].first);
v[i].second = i;
}
sort(v.begin(), v.end());
int group = 0;
int start_idx = 1;
int max = v[1].second;
bool find = false;
for (int i = 1; i <= n; i++)
{
if (v[i].second == start_idx && !find)
find = true;
if (v[i].second > max)
max = v[i].second;
if (find && i == max)
{
group++;
find = false;
start_idx = i+1;
max = v[i+1].second;
}
}
cout << group;
return 0;
}
이번 코포도 끝~~
D번 복붙해서 더럽게 짰으니 이건 북님 코드 함 보고 정리해봐야겠다.
'코드포스' 카테고리의 다른 글
[코드포스 Practice18] A. Minimum Triangulation (0) | 2020.04.16 |
---|---|
[코드포스 Practice18] 후기 (0) | 2020.04.16 |
[코드포스 Practice17] D. Pasha and String (0) | 2020.04.11 |
[코드포스 Practice17] C. MUH and Important Things (0) | 2020.04.11 |
[코드포스 Practice17] B. Bus of Characters (0) | 2020.04.11 |