첫번째 풀이는 완전탐색을 통해서 구현했습니다.
길이가 2인 집합을 만들면서 교집합의 개수를 구하려고 했습니다.
function solution(a) {
var answer = 0;
const SET = [...new Set(a)]
for(let s =0; s< SET.length; s++){
const NUMBER = SET[s]
//추가합니다.
let Len = 0;
let UsedIndex = -1;
for(let i=0; i<a.length; ){
//console.log(NUMBER , i , UsedIndex , Len)
if(i===0){
if(a[i]=== NUMBER){
Len+=2;
UsedIndex = i+1;
i+=2;
}else{
i++
}
}else if(i===a.length-1){
if(a[i]=== NUMBER){
if(UsedIndex === i-1|| a[i-1] === NUMBER){//바로 직전꺼 사용
break;
}else{// 상관 없음
Len+=2;
UsedIndex = i-1;
i+=1;
break;
}
}else{
break;
}
}else{
if(a[i]=== NUMBER){
if(UsedIndex === i-1|| a[i-1] === NUMBER){//바로 직전꺼 사용
Len+=2;
UsedIndex = i+1;
i+=2;
}else{// 상관 없음
Len+=2;
UsedIndex = i-1;
i+=1;
}
}else{
i++
}
}
}
console.log(NUMBER , Len)
answer = Math.max(answer , Len)
}
return answer
}
// 순서를 유지해야함
// 길이가 2이상
// 숫자의 종류를 파악한 후 추가한다.
// 이때 연속하면 안된다.
계속해서 코드에 문제가 발생했고, 아래 주석에서 기술한것처럼,
문제의 테스트 케이스들이 0 ~ 9 까지인것에 낚여, 결국 범위를 내 스스로 고쳐버렸다.
결국 고쳐주니 정상적으로 기능하는것을 확인했다.
function solution (a) {
let answer = 0;
const numberCount = new Array(a.length+1).fill(0) // 여기가 중요해... 문제를 잘읽자 멍청구리야
const SET = []
for(let i=0; i< a.length; i++){
numberCount[a[i]] +=1;
}
for(let i = 0; i< numberCount.length; i++){
if(numberCount[i] > 0){
SET.push([i, numberCount[i]])
}
}
SET.sort((a,b) => b[1] - a[1])
for(let i = 0; i < SET.length; i++) {
if(answer >= SET[i][1]) continue;
let count = 0;
for(let j = 0; j < a.length; j++) {
if(a[j+1] === undefined) continue;
if(a[j] === a[j+1]) continue;
if(a[j] !== SET[i][0] && a[j+1] !== SET[i][0]) continue;
count++;
j++;
}
answer = Math.max(answer, count);
}
return answer * 2;
}