728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/83201
문제 설명
정리하면, 스스로에게 준 점수가 유일한 최대/최소값이면 점수에서 제외시킵니다.
그리고 학생들의 점수의 평균을 구한 뒤 그에 맞는 등급을 반환하면됩니다.
풀이 방법
각 스텝별 메서드를 구현하였습니다.
1. 각 학생이 받은 전체 점수들을 map을 통해 저장합니다. (key : 학생, value : 해당학생이 받은 점수)
2. 나에게 준 점수가 유일한 최고/최저점 이라면 해당 점수를 제거합니다.
3. 점수 목록을 가지고 평균값을 구한 뒤 점수에 해당하는 등급을 구합니다.
내 코드(JAVA)
public class Solution {
// 학생별 점수를 담기위한 Map
Map<Integer, List<Integer>> scoreMap = new HashMap<>();
public String solution(int[][] scores) {
StringBuilder answer = new StringBuilder();
// 1. 각 학생이 받은 전체 점수들을 map을 통해 저장합니다. (key : 학생, value : 해당학생이 받은 점수)
setBasicScore(scores);
for(int i=0; i < scores.length; i++) {
List<Integer> scoreList = scoreMap.get(i);
int selfScore = scoreList.get(i);
// 2. 스스로에게 준 점수가 유일한 최고/최저점인지 확인한 후 true 라면 해당 점수를 제거합니다.
if(isRemoveMyScore(scoreList, selfScore)) scoreList.remove(i);
// 3. 점수 목록을 가지고 평균값을 구한 뒤 점수에 해당하는 등급을 구합니다.
answer.append(getGrade(scoreList));
}
return answer.toString();
}
/**
* 학생별로 점수를 map에 저장하는 메서드(key : 학생명(숫자), value : 자신의 점수 list)
*/
public void setBasicScore(int[][] scores) {
for(int i=0; i<scores.length; i++) {
List<Integer> score = new ArrayList<>();
for(int j=0; j<scores[i].length; j++) {
score.add(scores[j][i]);
}
scoreMap.put(i, score);
}
}
/**
* 자신에게 준 점수가 유일한 최고점 또는 최저점인지 반환하는 메서드
*/
public boolean isRemoveMyScore(List<Integer> scoreList, int selfScore) {
int count = 0;
int min = Collections.min(scoreList);
int max = Collections.max(scoreList);
if(selfScore == min || selfScore == max) {
for(int score : scoreList) {
if(score == selfScore) count++;
}
}
return (count == 1) ? true : false;
}
/**
* 점수들의 평균을 구한 뒤 평균에 해당하는 등급을 반환하는 메서드
*/
public String getGrade(List<Integer> scoreList) {
String grade = "";
double sum = 0;
double avg = 0.0;
for(int score : scoreList) {
sum += score;
}
avg = sum/scoreList.size();
if(avg >= 90) grade = "A";
else if(avg >= 80 && avg < 90) grade = "B";
else if(avg >= 70 && avg < 80) grade = "C";
else if(avg >= 50 && avg < 70) grade = "D";
else grade = "F";
return grade;
}
}
넘 복잡하게 느껴지는 것 같기도 하네요... 😢
728x90
반응형
'알고리즘' 카테고리의 다른 글
[LeetCode/JAVA] 1200. Minimum Absolute Difference (0) | 2021.09.14 |
---|---|
[프로그래머스/JAVA] 복서 정렬하기 (0) | 2021.09.13 |
[프로그래머스/JAVA] 부족한 금액 계산하기 (0) | 2021.09.08 |
[LeetCode/JAVA] 1684. Count the Number of Consistent Strings (0) | 2021.09.04 |
[LeetCode/JAVA] 965. Univalued Binary Tree (0) | 2021.09.01 |
댓글