프로그래머스/Python
[프로그래머스] 더 맵게 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 8. 12. 12:37
728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
효율성 테스트에서 시간 초과가 발생하는 것을 막고 빠른 연산 수행을 위해 heap 자료구조를 사용한다.
- heap 자료구조를 사용하기 위해 heapq 모듈을 불러온다. import heapq
- 리스트 형식을 입력받아진 scoville 자료를 heap 자료구조로 바꿔준다. heapq.heapify(scoville)
- scoville의 제일 작은 값이 K보다 작으면 반복해야 연산을 해야 하는데 이때 제일 작은 값을 찾겠다고 min() 함수를 사용하면 시간이 많이 소모된다.
- 여기서 heapify()는 기본적으로 최소 힙 정렬이 되기 때문에 정렬한 scoville의 제일 앞 원소의 값이 K보다 작으면 반복하도록 구현하면 시간이 단축된다. while (scoville[0] < K)
- 만약 scoville 원소이 개수가 2개가 안된다면 if (len(scoville) <= 1)
- 모든 음식의 스코빌 지수를 K이상으로 만들 수 없기 때문에 -1을 반환한다. return -1
- scoville 원소의 개수가 2개 이상이라면 제일 작은 원소를 삭제함과 동시에 가져오고 v1 = heapq.heappop(scoville)
- 그다음으로 작은 원소를 삭제함과 동시에 가져온다. v2 = heapq.heappop(scoville)
- 가져온 각 값을 가지고 새로운 스코빌 지수를 계산하여 값을 추가한다. heapq.heappush(scoville, v1 + v2 * 2)
- 두 음식을 섞는 연산이 수행되었으므로 섞은 횟수를 1 증가시킨다. answer += 1
반응형
3. 소스코드
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
while (scoville[0] < K):
if (len(scoville) <= 1):
return -1
v1 = heapq.heappop(scoville)
v2 = heapq.heappop(scoville)
heapq.heappush(scoville, v1 + v2 * 2)
answer += 1
return answer
728x90
반응형