반응형
https://school.programmers.co.kr/learn/courses/30/lessons/152995?language=javascript
(문제 내용은 링크를 참조해주세요)
처음엔 매우 간단한 문제라고 생각되었습니다. 완호가 탈락 대상인지 검사한 후, 탈락 대상이 아니라면 본인 보다 높은 점수를 받은 사람의 수를 찾아 자신의 등수를 계산하면 된다고 생각했습니다.
function solution(scores) {
var answer = 0;
var wh = scores[0]
// 탈락 여부 확인
if (scores.filter(a => (a[0] > wh[0] && a[1] > wh[1])).length > 0) return -1;
// 본인보다 높은 사람 수 + 1로 등수 계산
return scores.filter(a => a[0] + a[1] > wh[0] + wh[1]).length + 1;
}
위 코드로 연습문제는 모두 통과했지만, 채점에서는 72점이 나왔습니다. 완호보다 점수 합산이 높은 사람도 탈락 대상이 될 수 있다는 것을 간과하였습니다.
그래서 완호보다 점수 합산이 높은 인원 중 탈락 대상인 사람의 수를 찾아내서 그 수만큼 완호의 등수를 높이는 코드로 수정 하였습니다. 만약 모든 탈락 대상인 인원을 찾다간 시간 초과될 가능성이 있기 때문에 완호보다 높은 등수를 받을 가능성이 있는 인원만 체크하였습니다.
function solution(scores) {
var answer = 0;
var wh = scores[0]
// 탈락 여부 확인
if (scores.filter(a => (a[0] > wh[0] && a[1] > wh[1])).length > 0) return -1;
// 완호보다 점수 합산이 높은 사람 필터링
scores = scores.filter(a => a[0] + a[1] > wh[0] + wh[1])
// 왼쪽 숫자 기준으로 오름차순 정렬
scores.sort((a, b) => a[0] - b[0]);
// 탈락 대상자 수
var failCnt = 0;
// 우측 인덱스와 비교하여 탈락 대상 검사
for(var i=0; i<scores.length; i++){
for(var j=i+1; j<scores.length; j++){
if(scores[i][0] < scores[j][0] && scores[i][1] < scores[j][1]){
failCnt++;
break;
}
}
}
// 등수 계산
return scores.length + 1 - failCnt;
}
정답처리 되었습니다.
'알고리즘' 카테고리의 다른 글
[HackerRank] RestAPI Certificate (0) | 2023.10.16 |
---|---|
[백준] 14243 출근기록2 (C++) (0) | 2023.05.15 |
[프로그래머스] LV.5 상품을 구매한 회원 비율 구하기 (MySQL) (0) | 2023.04.21 |
[백준] 17298 오큰수 (C++) (0) | 2023.04.18 |
[프로그래머스] LV.3 숫자게임 (JAVA) (0) | 2023.04.18 |