🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
import java.util.*;
class Solution {
public int solution(int k, int m, int[] score) {
int answer = 0;
Arrays.sort(score); // score 배열을 오름차순으로 정렬
// score 배열을 내림차순으로 정렬
for(int i = 0 ; i < score.length / 2 ; i++) {
int temp = score[i];
score[i] = score[score.length - 1 - i];
score[score.length - 1 - i] = temp;
}
// 배열을 자르고 이익 계산
for(int i = 0 ; i < score.length / m ; i++) {
// score 배열에서 i * m 번째부터 m개의 원소를 복사하여 arr 배열을 생성
int[] arr = Arrays.copyOfRange(score, i * m, i * m + m);
if(arr.length == m) {
answer += arr[m-1] * m;
} else {
break;
}
}
return answer;
}
}
내림차순으로 정렬하려고 Arrays.sort(arr, Collections.reverseOrder())
쓰려고 했었다.
그런데 Arrays.sort()
의 반환형이 void라서 내림차순 정렬이 안 된다고 함(?!)
그래서 직접 내림차순 정렬 구현...
전체 score 배열을 길이만큼 자르고 (arr),
이 길이가 m과 같을 때,
자른 길이의 배열에서 제일 뒤쪽 원소가 제일 작으니까 이 값 * m해서 최대 이익을 계산한다.
💥 유의사항
• for문에서 i 의 반복 범위 ⇨ score.length / m
• 배열 복사할 때 범위 ⇨ Arrays.copyOfRange(arr, i *m, i * m + m);
🔺 다른 풀이들
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public int solution(int k, int m, int[] score) {
Arrays.sort(score);
int answer = 0;
for(int i = score.length - m; i >= 0; i-=m) {
answer += score[i] * m;
}
return answer;
}
}
앗... 엄청 깔끔.....
💬 느낀 점
나는.. 말하는 감자다...
(참고)
✔ Arrays.copyOfRange() : 특정 인덱스에서 배열 자르기
[Java] 특정 인덱스에서 배열 자르기
Java에서 특정 인덱스를 기준으로 배열을 자르는 2가지 방법을 소개합니다. 반복문 이용하기 Arrays.copyOfRange() 이용하기 1. 반복문 이용하기 import java.util.Arrays; public class ArraySplit { public static void main
hianna.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 1] 크레인 인형뽑기 게임 (0) | 2023.04.04 |
---|---|
[프로그래머스/Lv. 1] 카드 뭉치 (0) | 2023.04.04 |
[프로그래머스/Lv. 1] 기사단원의 무기 (0) | 2023.04.04 |
[프로그래머스/Lv. 1] 둘만의 암호 (0) | 2023.04.04 |
[프로그래머스/Lv. 1] 추억 점수 (0) | 2023.04.04 |