본문 바로가기
코딩 테스트/프로그래머스

[프로그래머스 - Python] Lv.1 과일 장수

by 오엥?은 2023. 2. 3.
반응형

 

  • 문제

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

 

프로그래머스

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

programmers.co.kr

 

  • 풀이
def solution(k, m, score):
    
    count = 0
        
    while len(score) >= m : 
        ans = []
        
        for x in range(0, m) :

            ans.append(sorted(score).pop())
            score.remove(sorted(score).pop())

        count += m * min(ans)

    return count

while 반복문을 score 배열의 길이가 m보다 크거나 같을 때 까지 돌려준다. (m개씩 끊어야되니까)

새로운 배열 ans 를 선언하고, 반복문을 m 번 돌려주는 for 문을 작성한다.

그리고 score 배열 오름차순으로 정렬하고 pop으로 뽑아버려 뽑은 건 remove 해서 지워버려야 된다.

그래야지 위에 적은 while 문 적용이 가능하다.

 

그리고 ans에서 가장 작은 수 * m 해준 걸 count 에 더해준다.

 

반복문 빠져나와서 return count 하면 정답 나온다. 

근데 시간초과 뜬다. 인생 역시 뜻대로 되는거 하나도 없네

 

def solution(k, m, score):

    sort_score = reversed(sorted(score))
    new_score = []
    answer = 0

    for x in sort_score:
        if x <= k:
            new_score.append(x)

    for x in range(1, int(len(new_score) / m) + 1):
        answer += new_score[(m * x) - 1] * m

    return answer

다시했다.

score 내림차순으로 정렬했다. 최대이익 구해야되니까 내림차순하는게 낫겠다.

정렬된 score를 반복문 돌려서 새로운 배열에 담는데 k보다 큰 건 그냥 안 담았다.

생각해보니까 1트에 k는 쓰지도 않았다 ㅎㅎ 

new_score 의 (m * x) - 1 번째는 m개씩 끊었을 때 젤 작은 수니까 거기다가 m 곱하고 answer 에 계속 더해주면 답 나온다.

시간초과도 안 뜬다.

 

 

 

def solution(k, m, score):
    return sum(sorted(score)[len(score)%m::m])*m

다른 사람 풀이 구경하러 갔더니 이래놨다. 제발 그만 잘해

len(score) % m : : m 은
index len(score) % m 부터 끝까지 m칸 간격으로 ( 역순 )

이런 뜻이래 담에 써먹어야지 화이팅

 

 

 

 

 

 

반응형