※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

'BOJ' 카테고리의 다른 글

[BOJ 24196 // C++] Gömda ord  (0) 2022.12.27
[BOJ 26849 // C++] Non Classical Problem  (0) 2022.12.26
[BOJ 13700 // C++] 완전 범죄  (0) 2022.12.26
[BOJ 26005 // C++] 나뭇잎 학회  (0) 2022.12.26
[BOJ 26007 // C++] Codepowers  (0) 2022.12.26

+ Recent posts