구름톤 챌린지 4일차 230817

Saru·2023년 8월 17일
0

구름톤 챌린지

목록 보기
4/5
post-thumbnail

하루하루 푸는 구름톤 챌린지 4일차~~

왠지 이것 때문에 퇴근이 기다려진다구~~(개뻥)

오늘의 문제는 함 - 바가 문제.
처음에 대충봐서 문제해석을 잘못해서 최고점을 기준으로 양쪽의 재료가 똑같아야 한다고 봤는데, 그게 아니라 최고점의 재료 기준으로 위든 아래든 같거나 점점 점수가 낮아 져야 한다는 것이였다. (초과되면 안돼!)

뭔가 명쾌한 풀이는 아니지만 그냥 서순에 따라 풀이하였다.

# 재료 갯수가 주어질 때, 최고점 기준으로
# 위, 아래 양방향 모두 앞수를 초과하지 않는다면 총합을, 초과한다면 0을 리턴

# 재료 갯수, 재료 점수 입력받기
n = int(input())
num_list = list(map(int, input().split()))

# 재료점수 총합 구해놓기
answer = sum(num_list)
# 정렬 후 마지막 index 숫자가 제일 큰 점수의 재료
high_num = sorted(num_list)[-1]
# 제일 큰 점수의 재료 index 찾기
index = num_list.index(high_num)
# 현재 재료 직전 점수
pre_num = high_num
# 최고점 이후 재료 검증
for x in range(index+1, n):
    # 이번 index의 재료의 점수가 전 index 보다 크다면 0리턴
    if num_list[x] > pre_num:
        answer = 0
        break
    pre_num = num_list[x]
# 최고점 리셋
pre_num = high_num
# 최고점 이전 재료 검증
for x in range(index-1, 0, -1):
    # 이번 index의 재료의 점수가 전 index 보다 크다면 0리턴
    if num_list[x] > pre_num:
        answer = 0
        break
    pre_num = num_list[x]
print(answer)

먼저 n입력받고, 재료의 점수를 num_list로 받는다.

규칙을 어기지 않으면 총합이 답이기 떄문에 먼저 구해놓는다.

내가 푼 방식은 여기서 먼저 최고점을 찾는다.
그런 다음 그 최고점의 index 값을 찾아서 이전 재료의 점수로 설정한다.
그다음 인덱스를 증가시키면서 비교, 별다른 이상이 없다면 다음 인덱스로 넘어가면서
해당 인덱스의 값을 이전 값으로 바꾼다.

이후 똑같이 감소시키면서 비교한다. 양방향 다 중간에 초과되는 값이있으면 0 을 리턴시킨다

아마 같은 반복문을 돌게하고, 방향 설정을 하면 될 것 같은데.. 그냥 리팩토링보단
구현에 초점을 맞추려고 한다...

여담으로 처음에 최고점에서 이후 검증만 해서 제출하니까
(최고점 리셋이전 까지)
모든 문제가 통과했는데, 검증 케이스가 이걸 못 걸러내는건지, 아니면
아래 for문 이후가 필요없는건지는 잘 모르겠다... 아몰랑 통과했엉

오늘은 아바타에 노트북도 얹혀줬다. 그럼 구름북인가 ?

profile
우당탕탕 개발기

0개의 댓글