학생들끼리 서로 채점하여, 본인의 점수가 유일한 최고점이거나, 최소점일 경우에는 본인이 채점한 본인의 점수를 제외하고 평균을 내어. 그 값으로 평점을 매기는 코드
public class pointingTest {
public static void main(String[] args) {
int[][] scores = {{100,90,98,88,65},{50,45,99,85,77},{47,88,95,80,67},{61,57,100,80,65},{24,90,94,75,65}};
String answer = solution(scores);
System.out.println(answer);
}
private static String solution(int[][] scores) {
int[][] a = scores;
int[][] b = new int[scores.length][scores.length];
int[] sum = new int [b.length];
int[] aver = new int [b.length];
int[] check = new int [b.length];
String answer = "";
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
b[j][i] = a[i][j];
}
}
// System.out.print("{");
// for (int i = 0; i < scores.length; i++) {
// System.out.print("{");
// for (int j = 0; j < scores.length; j++) {
// System.out.print(b[i][j]);
// if(j!=scores.length-1) {
// System.out.print(",");
// }
// }
// System.out.println("}");
// }
// System.out.println("}");
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b.length; j++) {
if(b[i][i]>b[i][j] && i!=j) {
check[i]++;
}else if(b[i][i]<b[i][j] && i!=j) {
check[i]--;
}
}
}
// System.out.print("{");
// for (int i = 0; i < check.length; i++) {
// System.out.print(check[i]);
// if(i!=check.length-1) {
// System.out.print(",");
// }
// }
// System.out.println("}");
for (int i = 0; i < check.length; i++) {
for (int j = 0; j < check.length; j++) {
if(check[i]==scores.length-1 || check[i]==-(scores.length-1)) {
sum[i] += (j!=i)? b[i][j]:0;
aver[i] = sum[i]/(sum.length-1);
}else {
sum[i] += b[i][j];
aver[i] = sum[i]/(sum.length);
}
}
}
// System.out.print("{");
// for (int i = 0; i < sum.length; i++) {
// System.out.print(sum[i]);
// if(i!=check.length-1) {
// System.out.print(",");
// }
// }
// System.out.println("}");
for (int i = 0; i < aver.length; i++) {
if(aver[i]>=90) {
answer += "A";
}else if(aver[i]>=80) {
answer += "B";
}else if(aver[i]>=70) {
answer += "C";
}else if(aver[i]>=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();
}
}
'코딩테스트 연습' 카테고리의 다른 글
게임의 각 스테이지별로 실패율을 구하는 로직 (0) | 2021.08.23 |
---|---|
로그인후 결제를 간단하게 로그화해보는 알고리즘 (0) | 2021.08.22 |
폰켓몬을 받을때 최대 몇 종류를 가져갈 수 있을까? (0) | 2021.08.20 |
체육복 서로 빌려줘 수업받을 수 있는 인원 확인하는 코드 (0) | 2021.08.20 |
일정한 형식의 답안을 제출하는 학생들중 최대 정답자명단 뽑기 (0) | 2021.08.20 |