반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/135808
🐍파이썬
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()
객체 참조를 새 배열로 복사, 얕은 복사이며 기존 배열을 대체하지 않는다.
반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | 파이썬 / 자바스크립트] 롤케이크 자르기(연습문제/ level 2) (0) | 2023.03.11 |
---|---|
[프로그래머스 | 파이썬 / 자바스크립트] 영어가 싫어요(코딩테스트 입문/ level 0) (0) | 2023.03.10 |
[프로그래머스 | 파이썬 / 자바스크립트] 오픈채팅방(2019 KAKAO BLIND RECRUITMENT/ level 2) (2) | 2023.03.06 |
[프로그래머스 | 파이썬] 더 맵게(힙(Heap)/ level 2) (0) | 2023.03.03 |
[프로그래머스 | 파이썬 / 자바스크립트] 주차 요금 계산(2022 KAKAO BLIND RECRUITMENT/ level 2) (0) | 2023.03.03 |
[프로그래머스 | 파이썬 / 자바스크립트] 대충 만든 자판(연습문제/ level 1) (0) | 2023.02.28 |