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


문제

 

주어진 수가 조건에 맞는 수인지 확인하는 문제이다.

조건은 연속으로 오르거나 내릴 때 각이 같아야 하고, 시작은 증가, 끝은 감소이다.

 


풀이

 

먼저 주어진 수를 리스트 컴프리헨션을 이용해 리스트로 바꿔준다. 그냥 문자열로 처리하거나 숫자로 입력받고, 자릿수로 분해해주어도 되겠지만, 이 방법이 가장 편할 듯 하다.

다른 조건을 검사하기 전에 시작과 끝의 각도를 확인하고, 시작이 감소이거나 끝이 증가이면 알프수가 아니므로 처리한다.

그 후 각각의 각을 확인하면서 조건에 맞는지 확인한다.

이전 각이 음수면서 지금 각도 음수인데 두 각이 다르면 알프수가 아니고, 이전 각이 양수면서 지금 각도 양수인데 두 각이 다르면 알프수가 아니다.

 


코드

 

num = [int(i) for i in input()]
ALPSOO = True

if (num[0] > num[1]) or (num[len(num)-2] < num[len(num)-1]):
    print("NON ALPSOO")
    exit(0)

for i in range(1, len(num)-1):
    seta1 = num[i] - num[i-1]
    seta2 = num[i+1] - num[i]
    if seta1 == 0 or seta2 == 0:
        ALPSOO = False
        break
    if seta1 > 0 and seta2 > 0 and seta1 != seta2:
        ALPSOO = False
        break
    elif seta1 < 0 and seta2 < 0 and seta1 != seta2:
        ALPSOO = False
        break

if ALPSOO:
    print("ALPSOO")
else:
    print("NON ALPSOO")

 

애스터로이드