[프로그래머스] 같은 숫자는 싫어, K번째 수 ,더 맵게

Chan Young Jeong·2023년 4월 6일
0

알고리즘

목록 보기
7/27

같은 숫자는 싫어

🔗 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12906

😮 알고리즘 풀이 순서

이 문제는 주어진 리스트에서 연속으로 중복된 숫자를 제거한 새로운 리스트를 반환하는 문제입니다.

이 코드에서는 answer 리스트를 이용하여 변환한 리스트를 저장합니다. for 문을 이용하여 arr 리스트의 각 요소를 순서대로 탐색합니다. 탐색 중에 현재 요소(a)가 answer 리스트의 마지막 요소와 같지 않은 경우에만 answer 리스트에 a를 추가합니다. 그렇지 않은 경우에는 answer 리스트에 추가하지 않습니다. 이를 통해, 인접한 숫자가 중복되지 않도록 리스트를 변환합니다.

이 코드는 시간 복잡도가 O(n)입니다.

❤️코드

def solution(arr):
    answer = []

    for i in arr:
        if not answer:
            answer.append(i)
        else:
            if answer[-1] == i:
                continue
            else:
                answer.append(i)

    return answer

K번째 수

🔗 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42748

😮 알고리즘 풀이 순서

❤️코드


def solution(array, commands):
    answer = []

    for start,end,pos in commands:
         answer.append(sorted(array[start-1:end])[pos-1])
    return answer

더 맵게

🔗 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42626

😮 알고리즘 풀이 순서

이 문제는 스코빌 지수가 주어졌을 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 구하는 문제입니다.

이 코드에서는 heapq 모듈을 사용하여 최소 힙(min heap) 자료구조를 구현하고, 이를 이용하여 문제를 해결합니다. 우선, 주어진 스코빌 지수 리스트(scoville)를 heapify 함수를 이용하여 최소 힙으로 변환합니다.

그리고 while 문을 이용하여 다음을 반복합니다:

  • scoville의 가장 작은 값(가장 낮은 스코빌 지수)이 K 이상이면, answer를 반환합니다. 이때, answer는 음식을 섞은 횟수를 의미합니다.
  • scoville 리스트의 길이가 2 이상이면, 가장 작은 스코빌 지수와 그 다음으로 작은 스코빌 지수를 heappop 함수를 이용하여 꺼내고, 이를 섞어서 새로운 스코빌 지수를 계산합니다. 이렇게 계산한 새로운 스코빌 지수는 heappush 함수를 이용하여 다시 리스트에 추가합니다. 이때, 새로운 스코빌 지수는 다음과 같이 계산됩니다: heappop1 + 2 * heappop2.
  • 만약 scoville 리스트의 길이가 2보다 작으면, 더 이상 섞을 수 없으므로 -1을 반환합니다.
  • 위의 과정을 반복하면, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 구할 수 있습니다.

❤️코드


from heapq import heappop,heappush,heapify


def solution(scoville, K):
    answer = 0
    heapify(scoville)

    while scoville:

        if scoville[0] >= K:
            return answer

        if len(scoville) >= 2:

            heappop1 = heappop(scoville)
            heappop2 = heappop(scoville)
            heappush(scoville, heappop1 + 2 * heappop2)
            answer += 1
        else:
            return -1

scoville = [1, 2,3]
K = 7
print(solution(scoville,K))

0개의 댓글