ALPSOO가 되기 위해서는 다음의 조건들을 만족해야 합니다.
A(i) - A(i-1)
== A(i+1) - A(i)
를 만족한다는 뜻입니다.오르막에서 내리막으로
내리막에서 오르막으로
바뀌는 구간은 경사가 달라도 아무런 상관이 없습니다.오르막에서 내리막으로
내리막에서 오르막으로
바꼈다는 건 A(i) - A(i-1)
x A(i+1) - A(i)
< 0 와 같습니다. 왜냐하면 오르막은 양의 기울기 값을, 내리막은 음의 기울기 값을 가지기 때문입니다.오르막에서 내리막으로
내리막에서 오르막으로
바꼈는지 판단하는 내용을 upside_downside 변수에 담았습니다.
lst = list(map(int,input()))
def check_alpsoo(lst):
#i가 0일 때
upside_downside = lst[1]-lst[0]
slope = lst[1]-lst[0]
#산맥의 처음이 오르막으로 시작하는지 확인합니다
if slope <=0:
print("NON ALPSOO")
return
#반복문 시작
for i in range(1,len(lst)-1): #위에서 초기값(i=0)을 설정했기 때문에 i는 1부터 시작합니다
#평평한 구간이 한 번이라도 나오면 NON ALPSOO 입니다
if lst[i] == lst[i+1]:
print('NON ALPSOO')
return
#기울기의 방향이 바꼈는지 판별합니다
upside_downside = (lst[i]-lst[i-1]) * (lst[i+1] - lst[i])
if upside_downside > 0: #기울기의 방향이 바뀌지 않았다면
#경사가 이전과 같은지를 확인합니다
if slope != lst[i+1]-lst[i]: #경사가 이전과는 다르면 NON ALPSOO 입니다
print("NON ALPSOO")
return
else: #기울기의 방향이 바꼈다면 경사가 이전과 다른지 체크할 필요가 없습니다
slope = lst[i+1]-lst[i] #slope를 현재의 경사값으로 갱신시켜 줍니다
#산맥의 마지막이 내리막으로 끝나는지 확인합니다
if slope<0:
print("ALPSOO")
else:
print("NON ALPSOO")
return
#답을 얻기 위한 함수를 실행합니다
check_alpsoo(lst)