본인 계획 :
브루트포스 알고리즘대로
일단 pivot으로 test[0]의 모든 2인1조의 경우를 만들고 다른 test[1], test[2]...까지 각 비교해주면서 기존 pivot과 역전된 요소가 있다면 pivot[0]의 그 요소를 제거해주려했다.
그런데 test[1]...부터 끝까지 만들고서 비교할 메소드를 만들지 못했다.
function solution(test) {
let pivotArr = [];
for (let i = 0; i < pivot.length - 1; i++) {
for (let j = i + 1; j < pivot.length; j++) {
pivotArr.push([pivot[i], pivot[j]]);
}
}
for (let i = 0; i < pivot.length - 1; i++) {
for (let j = i + 1; j < pivot.length; j++) {}
}
return pivotArr;
}
let arr = [
[3, 4, 1, 2],
[4, 3, 2, 1],
[3, 1, 4, 2],
];
console.log(solution(arr));
검토.
위의 코드는 브루트포스 방식으로 모든 가능한 2인 1조의 경우를 비교하여 역전된 요소를 제거하는 방식입니다. 주어진 문제는 그와는 다른 조건을 가진 문제로, 각 학생이 다른 학생보다 모든 테스트에서 높은 점수를 받아야 멘토와 멘티가 될 수 있습니다. 따라서, 문제를 해결하기 위해서는 다른 접근 방법이 필요합니다.
(허..)
<답안>
우선 아래의 비교조건을 통해 멘토 순위가 높은 경우임이 판단될경우, 횟수를 추가해서 강화하도록 했음.
나처럼 일일이 다 구해서 비교하기 보단, 각 경우에 맞는 조건을 계속 달아서 쓸 수 있도록 했음.
function solution(N, M, testResults) {
let count = 0;
for (let i = 1; i <= N; i++) { // 멘토 후보
for (let j = 1; j <= N; j++) { // 멘티 후보
if (i === j) continue; // 같은 학생은 멘토와 멘티가 될 수 없음
let mentorIsAlwaysHigher = true;
for (let k = 0; k < M; k++) { // 각 테스트에 대해
let mentorRank = testResults[k].indexOf(i);
let menteeRank = testResults[k].indexOf(j);
if (mentorRank > menteeRank) { // 멘토의 순위가 멘티보다 낮다면
mentorIsAlwaysHigher = false;
break;
}
}
if (mentorIsAlwaysHigher) {
count++;
}
}
}
return count;
}
// 입력 예제
let N = 4;
let M = 3;
let testResults = [
[3, 4, 1, 2],
[4, 3, 2, 1],
[3, 1, 4, 2]
];
console.log(solution(N, M, testResults)); // 출력: 3
'🗃️javascript > 코테 프레임 문제' 카테고리의 다른 글
4-2 뒤집은 소수(x) [filter(Boolean): fasly 값제외, 남은 값만 새 배열로 생성] (0) | 2024.04.18 |
---|---|
4-1 자릿수의 합(x) [for문의 안쓰기 위해 발버둥 치는 중] (0) | 2024.04.17 |
3-5 문자열 압축(△) (0) | 2024.04.16 |
3-4 가장 짧은 문자거리(x)[return문 작성 표시를 안해서 생긴 에러 고찰] (0) | 2024.04.16 |
3-3 숫자만 추출(x)[splice 활용: 원본의 변화는 임시 변수에 담아 재할당] (0) | 2024.04.16 |