어떤 값들이 있을 때, 가장 큰 값을 기준으로 잡는다.
이후 양옆(Index의 첫과 끝)으로 나아가면서, 이전 수와 같거나 작은지 확인하는 코드이다.
_ = int(input())
lst = list(map(int, input().split()))
MAX_INDEX = lst.index(max(lst))
ASC = lst[:MAX_INDEX]
DESC = lst[MAX_INDEX:]
print(sum(lst)) if ASC == sorted(ASC) and DESC == sorted(DESC, reverse=True) else print(0)
삼항 연산으로 마지막 줄이 길어지긴 했지만, 이 코드도 6줄로 끝난다.
처음에 받는 N개의 정수는 본 코드에서 사용할 일이 없어 무시(_)해 주었다.
그리고 max() 함수와 index() 함수를 엮어, 가장 큰 값의 index인 MAX_INDEX를 구해준다.
아래로 갈 때(ASC)와 위로 갈 때(DESC)를 각각의 list로 나누어주어 따로 계산한다.
print(sum(lst)) if ASC == sorted(ASC) and DESC == sorted(DESC, reverse=True) else print(0)
아래로 가든 위로 가든 MAX_INDEX를 기준으로 값이 낮아져야 한다.
ASC는 오름차순 그대로이기에, 정렬한 값이 정렬하기 전과 같은지 확인한다.
DESC는 거꾸로 되어있는 내림차순 형태이기에, reverse=True로 정렬한 뒤 이전 값과 같은지 확인한다.
case_1 = ASC == sorted(ASC)
case_2 = DESC == sorted(DESC, reverse=True)
if case_1 == True and case_2 == True:
print(sum(lst))
else:
print(0)
Python 삼항 연산자로 짠 코드를 읽기 쉽게 분해하면, 이렇게 바꿀 수 있다.
Python에는 정렬 내장 함수가 sort()와 sorted() 두 가지가 존재한다.
sort()는 In-place이고, sorted()는 아니다.
In-place라는 것은 추가 메모리를 사용하지 않고, 기존의 값을 변경하는 방법을 말한다.
그러니깐 sort()를 사용하면 기존의 값 자체를 바꿔버리는 정렬인 것이고,
sorted()를 사용하면 기존의 값은 유지한 채, 바뀐 값을 return하는 정렬이다.
코드에서는 정렬하기 전과 정렬한 후의 값을 비교해야 하기 때문에, sorted()로 비교해주었다.
'PS > 9oormthon Challenge' 카테고리의 다른 글
구름톤 챌린지 Week 2 - Day 6 (0) | 2023.08.25 |
---|---|
구름톤 챌린지 Week 1 - Day 5 (0) | 2023.08.19 |
구름톤 챌린지 Week 1 - Day 3 (0) | 2023.08.19 |
구름톤 챌린지 Week 1 - Day 2 (0) | 2023.08.19 |
구름톤 챌린지 Week 1 - Day 1 (0) | 2023.08.19 |