본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬 / 자바스크립트] 과일 장수(연습문제/ level 1)

by 청량리 물냉면 2023. 3. 5.
반응형
문제

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

 

프로그래머스

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

programmers.co.kr

 

 

🐍파이썬
def solution(k, m, score):
    answer = 0
    arr = []
    score.sort(reverse = True)
    for i in range(0, len(score), m):
        arr = score[i:i+m]
        if len(arr) == m:
            answer += min(arr) * m
    return answer

def solution(k, m, score):
    answer = 0
    score.sort(reverse = True)
    for i in range(1, len(score)//m + 1):	#1부터~(전체 배열 길이//m개)까지만 반복
        answer += score[m * i - 1] * m	#m개씩 묶은 배열의 가장 마지막 원소(각 배열에서 가장 작은 원소) * m개
    return answer

 

 

다른 풀이 방법

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

 score 배열의 시작 인덱스를 (전체 배열의 길이 % m)으로 정함으로써 m개로 묶이지 못한 작은 수들은 카운팅에 포함되지 않도록 하였다. 이후 배열의 끝까지 m씩 인덱스를 건너뛰며 리스트를 만들고 그 리스트의 합을 m과 곱해 답을 구했다. 

 

 

🐥자바스크립트
function solution(k, m, score) {
    var answer = 0;
    apple = score.sort((a, b) => b - a)	//내림차순 정렬
    let i = 0
    while(true){
        if(apple.slice(i, i + m).length < m){	//m개 이상으로 자를 수 없을 때 반복문 종료
            return answer;
        }
        answer += apple.slice(i, i + m).at(-1) * m	//m개씩 자른 배열의 맨 마지막 원소(가장 작은 원소) * m
        i += m	//인덱스 m만큼 건너뛰기
    }
}

at()

  • 정수 값을 받아, 배열에서 해당 값에 해당하는 인덱스의 요소를 반환하는 메서드.
  • 양수와 음수 모두 지정할 수 있고, 음수 값의 경우 배열의 뒤에서부터 인덱스를 센다.

 

다른 풀이 방법

function solution(k, m, score) {
    let answer = 0;
    //오름차순 정렬 후 m개로 묶이지 않는 나머지를 잘라냄
    const sortedScore = score.slice().sort((a, b) => a - b).slice(score.length % m);
    for (let i = 0; i < sortedScore.length; i += m) {
        answer += sortedScore[i] * m;
    }
    return answer;
}

💡 slice()

객체 참조를 새 배열로 복사, 얕은 복사이며 기존 배열을 대체하지 않는다.

 

 

 

 

 

 

반응형