반응형
▷ 문제 : AVAILABLE LESSONS 8 - EquiLeader (Easy)
▷ 해결 날짜 : 2022.04.20
▷ 소요 시간 : 1시간 30분
▷ 풀이 과정 :
자꾸 효율성 부분에서 0점이 나와 시간이 걸렸다.
이 문제는 Lesson 8 Leader 문제답게 리더로 두 그룹을 나누고 그 리더가 같은지 확인하는 것이다.
우선 첫 번째로 리더를 먼저 구해주었다.
리더를 구하면서 최댓값을 변수에 저장시켜놓고.
이제 두 그룹을 나눠서 비교를 해줘야 하는데, 리더가 누군지 알기 때문에 A(N),... A(S)까지 각각의 리더가 몇 개 분포되어있는지를 배열에 저장시켜준다.
그리고 마지막으로 두 그룹의 리더가 동일한지만 비교해주면 문제는 해결된다.
▷ 구현
function solution(A) {
let max = 0;
let leader = 0;
const map = new Map();
A.forEach(key => {
let num = map.has(key) ? map.get(key) + 1 : 1;
if(num > max){
max = num;
leader = key;
}
map.set(key, num);
});
let count = 0;
let leaderCnts = Array(A.length).fill(0);
for(let i = 0 ; i < A.length ; i++){
if(A[i] === leader) count++;
leaderCnts[i] = count;
}
let answer = 0;
for(let i = 1 ; i < A.length ; i++){
let max1 = leaderCnts[i - 1];
let max2 = max - max1;
if(max1 > i / 2 && max2 > (A.length - i) / 2) answer++;
}
return answer;
}
▷ 복기 :
후... 어렵다 어려워
이중 for문을 쓰면 대부분 효율성에서 별로 좋지 않은것 같다.
반응형
댓글