[Programmers](Weekly Challenge)第2週-JAVA
21066 ワード
📄 問題の説明
大学教授であるあなたは、相互評価を通じて学生たちに提出した宿題に加点したいと思っています.以下は、0~4番の5人の学生が自分と他の学生の宿題に対する採点表です.
No.01234009098886515045998577788958073615710080654249047565平均45.581.2597.281.667.8単位FBABD
上記の点数表では、i行j列の値は、i番学生が評価したj番学生の宿題点数である.
学生が自分の点数が唯一の最高点または唯一の最低点であると評価した場合、それ以外は平均値を求める.
平均単位90点以上A 80点以上90点未満B 70点以上80点未満C 50点以上70点未満D 50点F
学生スコアを含む整数型2 D配列スコアをパラメータとします.このとき、解関数を完了し、学生の単位を求めて文字列にして返してください.
📑 せいげんじょうけん
👨🏻💻 私が書いたコード
import java.util.*;
class Solution {
public String solution(int[][] scores) {
String answer = "";
int average = 0;
for(int i = 0; i < scores.length; i++) {
ArrayList<Integer> list = new ArrayList<>();
average = 0; // 평균값
int min = 101; // 최소값
int max = 0; // 최대값
boolean checkMax = false; // 중복x
boolean checkMin = false; // 중복x
for(int j = 0; j < scores.length; j++) {
list.add(scores[j][i]);
if(scores[j][i] > max) { //최대값이 바뀌면 중복값이 없다는 뜻.
max = scores[j][i];
checkMax = false; // 그래서 중복값은 false로 초기화.
}else if(scores[j][i] == max) { // 최대값이랑 같다면 중복이 있다는 뜻.
checkMax = true; // 중복이 있음.
}
if(scores[j][i] < min) {
min = scores[j][i];
checkMin = false;
}else if(scores[j][i] == min) {
checkMin = true;
}
}
//내가 나한테 준 점수가 최대값(최소값)이랑 같고 중복이 없다면
if(list.get(i) == max && checkMax == false) {
list.remove(i); // 내 점수를 삭제해 준다.
}else if(list.get(i) == min && checkMin == false) {
list.remove(i);
}
for(int k = 0; k < list.size(); k++) { // 내가 받은 점수 합구하기 위한 for문
average += list.get(k);
}
average /= list.size(); // 평균을 구해줌.
if(average >= 90) {
answer += "A";
}else if(average >= 80) {
answer += "B";
}else if(average >= 70) {
answer += "C";
}else if(average >= 50) {
answer += "D";
}else{
answer += "F";
}
}
return answer;
}
}
👨🏻🏫 コード解析
これらをコメントとして扱った後は説明しません~気になることがあればコメントをお願いします!
他人を解く
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();
}
}
💡 に感銘を与える
リストの集合とMath.maxとminでカッコ良く解きたいけど…思うようにいかないから...?解いてみました...これも1日かかりました.難しい問題...ううう
Reference
この問題について([Programmers](Weekly Challenge)第2週-JAVA), 我々は、より多くの情報をここで見つけました https://velog.io/@lee951109/Programmers위클리-챌린지-2주차-JAVAテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol