[baekjoon / Python] 21758 꿀따기

yujeongkwon·2023년 5월 8일
0

baekjoon

목록 보기
8/8

문제 설명

N개의 장소가 있다.
장소들 중 서로 다른 두 곳을 골라서 벌을 한 마리씩 둔다. 또, 다른 한 장소를 골라서 벌통을 둔다. 두 마리 벌은 벌통으로 똑바로 날아가면서 지나가는 모든 칸에서 꿀을 딴다. 각 장소에 적힌 숫자는 벌이 지나가면서 꿀을 딸 수 있는 양이다.
벌이 시작한 장소에서는 어떤 벌도 꿀을 딸 수 없다.
장소들의 꿀 양을 입력으로 받아 벌들이 딸 수 있는 가능한 최대의 꿀의 양을 계산하는 프로그램을 작성하라.

Coment

아효 인덱스 관련된 애들은 삐긋 하면 틀린다니까~ 예민한 친구들 -0- 꿀통이 왼쪽에 있는경우, 오른쪽에 있는 경우, 중간에 있는 경우로 일들을 분할 해줘야 겠다! 라는 생각을 시작으로 해야함.

벌들 요리조리 꿀통 요리조리 투포인터 마냥 옮겨줄까를 시도하다가 아래 코드 처럼 for문 3번 돌림. 시간복잡도 O(n)

코드 형태가 조금 빼고 비슷해서 투포인터 형식처럼 어떤 조건에서는 꿀통 옮기고~ 어떤 조건에서는 벌들 옮기고 이렇게 한번에 안될까하다가 되기는 개뿔 시간 개잡아먹었고요~
실제 시간제한이 있는 코테에서는 객기 부리지 말고 정석대로 해야겠어용~

내 코드

아고 길다 다른 사람둘운 짧게 잘하던데 ~

참나 문제 푸는거 1시간 반 코드 리펙터링 할려다가 1시간 반썻네 결국 처음이랑 똑같죠 ㅋㅋ/?

But! 짧다고 조은게 아니지,
however! 보통 짧으면 가독성이 좋지..,
Nevertheless! 보기 ㅅ..ㅅ.쉬..쉽쥬 ㅎ...?
아 저 max 두번 하는거 어케 정리해야할지 모르겠음 아몰라

N = int(input())
space = list(map(int,input().split()))
maxHoney = 0

#꿀통이 왼쪽 끝, bee1은 인덱스 N-2부터 -1씩
bee1Sum,bee2Sum = sum(space[:-2]),sum(space[:-2])
maxHoney = max(maxHoney,bee1Sum+bee2Sum)
for bee1 in range(N-3,0,-1):
    bee1Sum -= space[bee1]
    bee2Sum += space[bee1+1]-space[bee1]
    maxHoney = max(maxHoney,bee1Sum+bee2Sum)

#꿀통이 오른쪽 끝, bee2은 인덱스 1부터 +1씩
bee1Sum,bee2Sum = sum(space[2:]),sum(space[2:])
maxHoney = max(maxHoney,bee1Sum+bee2Sum)
for bee2 in range(2,N-1):
    bee2Sum -= space[bee2]
    bee1Sum += space[bee2-1]-space[bee2]
    maxHoney = max(maxHoney,bee1Sum+bee2Sum)

# 꿀통이 중간일 때, 꿀통은 인덱스 1부터 시작
bee1Sum,bee2Sum = space[1],sum(space[1:-1])
maxHoney = max(maxHoney,bee1Sum+bee2Sum)
for honeyBucket in range(2,N-1):
    bee1Sum += space[honeyBucket]
    bee2Sum -= space[honeyBucket-1]
    maxHoney = max(maxHoney,bee1Sum+bee2Sum)

print(maxHoney)
profile
인생 살자.

0개의 댓글