1 분 소요

문제 링크

내 풀이 (틀림)

def solution(people, limit):
    people.sort(reverse = True)
    answer = 0
    while people:
        remain = limit
        count = 0
        for i, person in enumerate(people):
            if person <= remain:
                remain = limit - person
                people.remove(person)
                count += 1
                if count == 2:
                    break
                
            
        answer += 1
        
    return answer

다른 풀이

def solution(people, limit):
    
    people.sort() # 사람들의 몸무게를 오름차순으로 정렬
    count = 0 # 사용된 구명보트의 개수
    
    # 가장 가벼운 사람과 가장 무거운 사람을 가리키는 인덱스를 초기화
    front, end = 0, len(people) - 1

    # 모든 사람이 구명보트에 탈 때까지 반복
    while front <= end:
        
        # 가장 가벼운 사람과 가장 무거운 사람의 무게 합이 구명보트의 무게 제한보다 작거나 같은 경우
        if people[front] + people[end] <= limit:
            # 두 사람을 함께 태울 수 있으므로 가장 가벼운 사람을 가리키는 인덱스를 하나 증가시킴
            front += 1

        # 가장 무거운 사람만 태울 수 있는 경우, 가장 무거운 사람을 가리키는 인덱스를 하나 감소시킴
        end -= 1

        count += 1 # 어떤 경우든 구명보트의 개수를 하나 증가시킴

    return count
출처: https://1ets-just-do-it.tistory.com/129 [파이썬은 신이야🔥🔥🔥:티스토리]

풀이 해석

  • 가장 가벼운 사람과 무거운 사람의 인덱스를 초기화 한 후 두명이 모두 탑승할 경우 둘의 인덱스를 변경하고 안될 경우 무거운 사람 한사람만 태우고 인덱스를 줄이는 방식을 사용하였다

배울 점

  • 인덱스를 활용하는 사고

댓글남기기