여니의 취준 준비/코딩테스트 (Python)

[20127] Y - 수열 in python

여니's 2022. 1. 30. 17:34

 

너무 어려웠다 ㅠㅠ...

 

일단

상승곡선이 하락곡선 또는 하락곡선이 상승곡선으로 바뀌는 구간이

2개 이상일 경우에는 

-1을 출력해야 한다.

 

그리고

이미 주어진 배열 자체가 증가 또는 감소 수열이면

0을 출력한다.

 

두 가지를 제외했을 때가

직접 바꿔줘야 하는 때이다.

 

아래 코드 지저분함 주의..

# n = int(input())
# array = list(map(int, input().split()))
# cnt = 0
# plus = False
# minus = False
# button = False
# mid=False
# answer = 0
#
# for i in range(1, n):
#     if cnt > 1:
#         print(-1)
#         exit()
#     if array[i] >= array[i - 1]:
#         if array[i]==array[i-1]:
#             mid=True
#         plus = True
#         if minus:
#             cnt += 1
#             minus = False
#             plus = True
#             button=True
#         if not button:
#             answer+=1
#     else:
#         minus = True
#         if plus:
#             cnt += 1
#             plus = False
#             minus = False
#             button=True
#
#         if not button:
#             answer+=1
#
# if cnt > 1:
#     print(-1)
# elif cnt == 1:
#     if mid:
#         print(answer)
#     else:
#         print(answer+1)
# else:
#     print(0)

 

True, False를 이용해서 

하려다 보니 코드가 매우 지저분하다 ;..

 

부분적으로 주어진 케이스만 맞고

나머지 히든 케이스에 맞지 않아서

실패로 떴던 코드 ㅠㅠ 

 

그래서 결국

이번 문제도 구글링..

 

아래처럼

심플하게 나도 코드를 짜고 싶다 ㅠㅠ

엉엉

 

문자열 이용해서

직접 리스트 원소들을 +연산자를 이용하여 

이어준다.

 

그리고 위 리스트와 

초기에 오름차순, 내림차순으로

정렬해두었던 리스트와 같은지

비교를 해본다.

 

가능한 케이스가 여러개이면

가장 작은 숫자를 출력해야 하는데

이 부분도 어렵지 않게

아래처럼 구하면 쉽게 나온다 ㅂㄷㅂㄷ

 

min함수를 활용하여

하면 끝..

 

분발하자!

 

n = int(input())
array = list(map(int, input().split()))
up, down = 1,1
for i in range(1,n):
    if array[i-1]>array[i]:
        break
    up+=1
for i in range(1,n):
    if array[i-1]<array[i]:
        break
    down+=1

upArray = sorted(array)
downArray = sorted(array, reverse=True)
if array == upArray or array == downArray:
    print(0)
elif array[up:] + array[:up] == upArray and array[down:] + array[:down] == downArray:
    print(min(up, down))
elif array[up:] + array[:up] == upArray:
    print(up)
elif array[down:] + array[:down] == downArray:
    print(down)
else:
    print(-1)