import java.util.*;
class Solution {
public String solution(int[][] scores) {
String answer = "";
ArrayList<Double> grade = new ArrayList<>();
for(int i=0;i<scores.length;i++){
ArrayList<Integer> list = new ArrayList<>();
HashMap<Integer,Integer> map = new HashMap<>();
int self = 0;
for(int j=0;j<scores.length;j++){
if(i==j) self = scores[j][i];
list.add(scores[j][i]);
map.put(scores[j][i],map.getOrDefault(scores[j][i],0)+1);
}
Collections.sort(list,Collections.reverseOrder());
Double average = 0.0;
boolean check = true;
for(int k=0;k<list.size();k++){
if(list.get(k)==self && (k==0||k==list.size()-1)){
if(map.get(list.get(k))>1) average+=list.get(k);
else check = false;
}
else{
average+=list.get(k);
}
}
if(!check) average = average/(scores[i].length-1);
else average = average/scores[i].length;
grade.add(average);
}
for(Double g:grade){
if(g>=90) answer+="A";
else if(g<90 && g>=80) answer+="B";
else if(g<80 && g>=70) answer+="C";
else if(g<70 && g>=50) answer+="D";
else answer+="F";
}
return answer;
}
}
알고리즘
self: 자기 자신 점수 저장
list: 점수 저장(정렬 위함)
map: 점수별 동점자 수 계산
check: 평균합에 자기자신이 평가한 점수가 들어가는지 체크하는 변수(나누는 명수 달리 하기 위함) true가 기본값
for문 돌면서 점수 확인{
if(self랑 같은 경우(자기자신인 경우) && (최고점 또는 최저점인 경우)){
if(map.get(self)>1) 평균합 더하기
else check = false;
}
}
check 여부에 따라 평균값 구하기
class Solution {
public String solution(int[][] scores) {
StringBuilder builder = new StringBuilder();
for(int i=0; i<scores.length; i++) {
int max = 0;
int min = 101;
int sum = 0;
int divide = scores.length;
for(int j=0; j<scores.length; j++) {
int score = scores[j][i];
if(i != j) {
if(score < min) {
min = score;
}
if(score > max) {
max = score;
}
}
sum += score;
}
if(scores[i][i] < min || scores[i][i] > max) {
sum -= scores[i][i];
divide--;
}
double score = (double) sum / divide;
builder.append(score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 50 ? "D" : "F" );
}
return builder.toString();
}
}
프로그래머스에서 다른 사람 풀이 구경하다가 본 제일 깔끔한 코드.
나는 정렬을 위해 list를 따로 선언했는데 애초에 저런식으로 비교하면 될 일이었음.. 참 어렵게 문제 푸는게 능력인 나..ㅎㅎ
그리고 divider 구분여부도 저렇게 boolean으로 체크할 필요도 없었음..
온갖 자료형 다 써서 구현한듯. 무조건 빠르게 푸려는 습관좀 고쳐야겠음.