https://level.goorm.io/exam/195686/완벽한-햄버거-만들기/quiz/1

어떤 값들이 있을 때, 가장 큰 값을 기준으로 잡는다.

이후 양옆(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

+ Recent posts