작성
·
279
·
수정됨
0
강의 보기전에 혼자 풀어보았는데
저의 경우에는 미리 순위를 추출해서 result ㄹ라는 변수에 저장한뒤 for문을 돌려서 result 에 있는 순위를 비교해서 답을 내도록 했는데
혹시 틀렸거나 비효율적이라면 어떤 점이 문제인지 알려주시면 감사하겠습니다..!
function solution(test) {
let a = test.length,
b = test[0].length;
let result = Array.from({ length: b + 1 }, () => []); // [[], [], [], [], []]
let answer = 0;
for (let x of test) {
// [3,4,1,2]
for (let i = 0; i < b; i++) {
result[x[i]].push(i + 1);
}
}
for (let i = 1; i < b + 1; i++) {
// 0~4
for (let j = 1; j < b + 1; j++) {
// result[i] 랑 result[j] 비교
if (i === j) continue;
let isMento = true;
for (let n = 0; n < a; n++) {
if (result[i][n] <= result[j][n]) {
isMento = false;
break;
}
}
isMento && answer++;
}
}
return answer;
}
let arr = [
[3, 4, 1, 2],
[4, 3, 2, 1],
[3, 1, 4, 2],
];
console.log(solution(arr));
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
00님, 자바스크립트로 코딩 테스트 문제를 푸는 다양한 접근 방법이 있을 수 있습니다. 제공하신 풀이 방식은 문제 해결을 위한 독창적인 접근법 중 하나로 보이며, 특정 로직 상의 문제가 없다면 정답으로 인정될 수 있습니다. 효율성의 경우, 중첩 for 루프 사용으로 인해 시간 복잡도가 증가하는 점이 있을 수 있는데, 해당 알고리즘 문제의 크기와 요구사항에 따라 다를 수 있습니다.
제공하신 코드를 보았을 때, 멘토-멘티를 정하는 로직에서 중첩된 루프를 통해 각 학생들의 순위를 비교하고 있으며, 모든 경우에서 특정 학생이 다른 학생보다 순위가 앞선 경우에 answer
를 증가시키는 방식으로 답을 도출하고 있습니다. 이 접근 방식은 멘토-멘티 관계를 찾기 위한 하나의 올바른 방법이 될 수 있습니다. 다만, 큰 입출력 데이터에 대해서는 더 최적화된 알고리즘이 있을 수 있으므로, 더 효율적인 방법이 있는지 늘 고민해볼 가치가 있습니다.
코드에 문법적인 오류나 명확한 논리적 오류가 없으므로, 제시한 방식도 충분히 유효한 풀이라고 볼 수 있습니다. 추후에 여러가지 다른 풀이 방식이나 최적화에 대해 더 배우고 싶으시다면 인프런의 다양한 자바스크립트 알고리즘 강의를 통해 추가 학습을 해보시기를 추천드립니다.
강의에 대한 추가 이해가 필요하거나 궁금한 점이 있으시다면 언제든지 질문해주시기 바랍니다.