프로그래머스 위클리 챌린지 2주차에는 이런 문제가 나왔습니다.
이 문제 또한 난이도가 낮은 편이기 때문에 여러 가지 풀이가 나올 수 있는데
다른 사람들의 풀이를 봤을 때 '오, 이거 좋은데?' 싶은 방법을 보지 못했기 때문에
제가 풀었던 방식으로 소개해볼까 합니다.
1. 자기 자신에게 준 점수가 유일한 최저점 혹은 유일한 최고점인지 구하기
0번 학생이 받은 점수는 scores[0]이며, 자기 자신에게 준 점수는 scores[0][0]입니다
저는 유일한 최고점 혹은 유일한 최저점이라고 한다면
본인이 받은 모든 점수가 자기 자신에게 준 점수보다 낮거나
본인이 받은 모든 점수가 자기 자신에게 준 점수보다 높아야 한다고 생각했습니다.
그래서 int 타입의 flag라는 변수를 0으로 선언하여
scores[0][0], scores[0][1], ···, scores[0][N] 까지 돌면서
자기 자신에게 준 점수보다 높으면 flag++, 자기 자신에게 준 점수보다 낮으면 flag--를 했고
scores[0][N]까지 돌고 난 후에 flag의 절대값(높은지 혹은 낮은지의 갯수를 세기 위한 변수)과
scores.length - 1(본인을 제외한 사람들의 수)을 비교하여
같다면 본인이 받은 점수에서 자기 자신에게 준 점수를 제외하고
다르다면 제외하지 않고 평균을 구했습니다.
int totalLen = scores.length;
for(int idx1 = 0; idx1 < totalLen; idx1++) {
int total = 0;
int flag = 0;
int my = scores[idx1][idx1];
int len = totalLen;
for(int idx2 = 0; idx2 < totalLen; idx2++) {
int num = scores[idx2][idx1]; // 본인 포함 각 사람들이 본인에게 준 점수
total += num;
if(my < num) { // 자기 자신에게 준 점수와 비교
flag++;
} else if(my > num) {
flag--;
}
}
if(Math.abs(flag) == (len - 1)) { // 자기 자신에게 준 점수는 위 if문에서 걸리지 않으니 len - 1과 비교
total -= my; // 자기 자신에게 준 점수보다 모두 낮거나 모두 높다면 본인의 점수 제외
len--;
}
answer += returnGrade((total / len));
}
이 문제는 자기 자신에게 준 점수가 유일한 최고점 혹은 유일한 최저점인지를
어떻게 구할 건지가 가장 중요한 것 같습니다
'찌끄레기 개발자 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 위클리 챌린지 8주차 (0) | 2021.10.02 |
---|---|
[Java] 프로그래머스 위클리 챌린지 1주차 (0) | 2021.09.26 |