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

 

이번에 볼 문제는 백준 23886번 문제인 알프수이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/23886 

 

23886번: 알프수

어떤 양의 정수의 각 자리 숫자를 순서대로 간격을 일정하게 꺾은선 그래프로 나타냈을 때, 오르막 또는 내리막의 경사가 중간에 달라지지 않는 산 모양이 나온다면 그 양의 정수를 알프수라

www.acmicpc.net

주어진 수가 알프수일 조건은 다음과 같이 바꿔 쓸 수 있다.

1. 첫 두자리를 비교했을 때 첫 자리가 두번째 자리보다 크고

2. 마지막 두 자리를 비교했을 때 마지막 자리가 그 전 자리보다 작으며

3. 같은 숫자가 연속하지 않고

4. 인접한 모든 세 수는 "일정하게 증가", "일정하게 감소", 또는 "증가도 감소도 아님" 셋 중 하나를 만족해야한다.

 

이를 잘 구현하여 문제를 해결하자.

 

주어지는 숫자가 매우 크므로, 정수로 받으려고 시도하는 것보다 문자열로 취급하는 것이 더 편하다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	bool ans = 1;
	string s; cin >> s;
	int slen = s.length();
	if (s[0] >= s[1] || s[slen - 2] <= s[slen - 1]) ans = 0;
	for (int i = 2; i < slen; i++) {
		int l = (int)s[i - 1] - (int)s[i - 2], r = (int)s[i] - (int)s[i - 1];
		if (r == 0 || (l != r && l * r > 0)) ans = 0;
	}

	if (ans) cout << "ALPSOO";
	else cout << "NON ALPSOO";
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24078 // C++] 余り (Remainder)  (0) 2022.01.14
[BOJ 24082 // C++] 立方体 (Cube)  (0) 2022.01.13
[BOJ 23885 // C++] 비숍 투어  (0) 2022.01.11
[BOJ 9470 // C++] Strahler 순서  (0) 2022.01.10
[BOJ 1507 // C++] 궁금한 민호  (0) 2022.01.09

+ Recent posts