BOJ
[BOJ 26770 // C++] Basen
measurezero
2022. 12. 26. 10:00
※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 26770번 문제인 Basen이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/26770
26770번: Basen
W pierwszym wierszu wejścia znajduje się jedna liczba naturalna N, 1 ≤ N ≤ 1 000 000, określająca liczbę odczytów zegarka Bajtka. W drugim (ostatnim) wierszu wejścia znajduje się ciąg N liczb całkowitych P1, P2,. . . , PN , 0 ≤ Pi ≤ 109,
www.acmicpc.net
0에서 출발해 무조건 방향을 틀어야 하는 순간이 몇 회인지, 즉 각 중간순서의 수들 중 (같은 수가 아닌 가장 가까운) 앞뒤 수보다 모두 크거나 모두 작은 수의 개수가 몇개인지를 세는 것으로 문제를 해결하자.
이 때, 같은 수가 아닌 가장 가까운 앞뒤 수를 빠르게 구하기 위해 입력을 받을 때 연속으로 같은 수가 들어오면 하나만 넣게끔 구현을 하면 문제를 편하게 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N;
int arr[1000001];
int ans = 1;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 1; i <= N; i++) {
int x; cin >> x;
if (arr[i - 1] == x) i--, N--;
else arr[i] = x;
}
for (int i = 2; i <= N; i++) {
if ((arr[i - 2] < arr[i - 1] && arr[i - 1] > arr[i]) || (arr[i - 2] > arr[i - 1] && arr[i - 1] < arr[i])) ans++;
}
cout << ans;
}
728x90