본문 바로가기

알고리즘/프로그래머스

[Python] 구명 보트

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

# 시간 초과가 나옴
def solution(people, limit):
    people.sort()
    answer = 0
    
    while len(people)>1:
        if people[-1] + people[0] <= limit:
            people = people[1:-1]
            answer += 1
        else:
            people = people[:-1]
            answer += 1
            
    if len(people)==1:
        answer += 1
        
    return answer

정답은 맞았지만 마지막 효율성 부분에서 시간초과로 탈락함

 

  • 다른 사람의 풀이
# 다른 사람 풀이
def solution(people, limit) :
    answer = 0
    people.sort()

    a = 0
    b = len(people) - 1
    while a < b :
        if people[b] + people[a] <= limit :
            a += 1
            answer += 1
        b -= 1
    return len(people) - answer

최소와 최대를 묶어서 같이 보트를 태운다는 아이디어는 동일함.

 

차이점은 인덱스를 이용해서 찾아 나간다는 점이 다름.

 

마지막 리턴값이 len(people) - answer인 이유는 애초에 두 명을 묶어서 보내는 경우의 개수만 측정했기 때문임.

 

모든 사람을 한 명씩 태워보내면 len(people)이고, 두 명을 묶어서 태워보내는 경우를 빼줘야함

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] N개의 최소공배수  (0) 2022.11.23
[Python] 삼총사  (0) 2022.11.22
[Python] 숫자 문자열과 영단어  (0) 2022.11.20
[Python] K번째 수  (0) 2022.11.19
[Python] 영어 끝말잇기  (0) 2022.11.18