문제를 보고 일단 풀이 방법을 이 순서로 정해보았다.
- 주어진 배열에서 중복되는 숫자를 없앤 배열을 만든다.
- 새로만든 배열을 반복문을 수행하면서, 원래 배열과 같은 숫자일 때 count를 ++한다.
(각각의 숫자가 배열에 총 몇 개씩 들어있는지 세는 것!) - 제일 큰 count를 구하기
단, 제일 큰 count가 2개 이상일 경우 answer에 -1 넣어주기 - 제일 큰 count를 가진 수가 어떤 숫자였는지 찾아내기
처음 풀이
function solution(array) {
var answer = 0;
const newArr = [...new Set(array)];
const count = [];
for (let i = 0; i < newArr.length; i++) {
count[i] = 0;
for (const j of array) {
if (newArr[i] === j) {
count[i] += 1;
}
}
}
const sortCount = count.sort((a, b) => b - a);
if (sortCount[0] === sortCount[1]) {
answer = -1;
} else {
answer = sortCount[0];
}
return answer;
}
생각했던 방법대로 풀이를 했으나 정답은 아니었다.
일단, 중복 숫자는 set으로 제거를 했다.
그리고 카운트를 세어 담을 수 있는 빈 배열을 선언했다.
이 count 배열은 new set으로 만든 배열의 길이와 같게 될 것이다.
반복문을 통해서
각각 숫자가 원래 배열에 몇개씩 들어있는지 확인한다.
newArr = [1,2,3,4] 이고,
array = [1,2,3,3,3,4] 일 경우에
count = [1,2,3,1] 이 된다.
그리고 sort를 이용해서 count를 큰 순서로 정렬한다.
조건문에서 count의 최댓값이 2개 이상인 경우가 있는지 확인한다.
최댓값이 1개라면 answer에 바로 count의 최댓값을 넣었다!
37.5점으로 실패!
처음에는 왜 실패인지 몰랐으나 질문하기 게시판에서 힌트를 얻었다.
최빈값을 구한게 아니라
count를 구해버려서 실패된 것이다.
두 번째 오답 풀이
function solution(array) {
var answer = 0;
const newArr = [...new Set(array)];
const count = [];
for (let i = 0; i < newArr.length; i++) {
count[i] = 0;
for (const j of array) {
if (newArr[i] === j) {
count[i] += 1;
}
}
}
const sortCount = count.sort((a, b) => b - a);
if (sortCount[0] === sortCount[1]) {
answer = -1;
} else {
for (let i = 0; i < count.length; i++) {
if (count[i] === sortCount[0]) {
answer = newArr[i];
}
}
}
return answer;
}
그래서 조건문을 조금 수정했다.
count는 newArr의 길이만큼 만들어진 배열이기 때문에
인덱스의 정보가 일치하는 점을 활용하고자 했다.
반복문을 통해서
크기순으로 정렬되지 않은 count배열에 최댓값이 어떤 인덱스를 갖고 있는지 찾아내도록 했다.
그런데, 원하는 결과값이 나오지 않았다.
최종 풀이
function solution(array) {
var answer = 0;
const newArr = [...new Set(array)];
const count = [];
for (let i = 0; i < newArr.length; i++) {
count[i] = 0;
for (const j of array) {
if (newArr[i] === j) {
count[i] += 1;
}
}
}
const sortCount = [...count].sort((a, b) => b - a);
if (sortCount[0] === sortCount[1]) {
answer = -1;
} else {
for (let i = 0; i < count.length; i++) {
if (count[i] === sortCount[0]) {
answer = newArr[i];
}
}
}
return answer;
}
console.log로 확인을 해 본 결과,
count.sort를 하면 count가 유지되지 않고, 변경된다!
즉,
const sortCount = count.sort((a, b) => b - a); 이렇게 sort를 사용하게 되면,
sortCount === count 가 되는 것이었다.
그래서 count자체가 아닌
spread 문법으로 count와 같은 새로운 배열을 sort하는 방법을 생각해냈다!
꽤 복잡한 방법으로 풀이가 된 것 같아서,
다음에 좀 더 간추릴 수 있는 방법을 생각해봐야겠다!!