천진난만 코딩 스토리
2023.06.04) Migratory Birds (1) 본문
1. 문제 및 예시


2. 내가 푼 풀이
function migratoryBirds(arr) {
// Write your code here
let ar = arr.sort()
let answer = 0;
let max = 1;
let count = 1;
for(let i=0; i<ar.length; i++){
count = (ar.lastIndexOf(ar[i]) - ar.indexOf(ar[i])) + 1;
if(count>max){
max=count;
answer=ar[i]
}
}
return answer;
}
3. 풀이 설명
이번 문제는 꽤 많이 어려웠고, 이해하기 위해 직접 종이에 풀이를 써보며 계산해보았다...
for(let i=0; i<ar.length; i++){
count = (ar.lastIndexOf(ar[i]) - ar.indexOf(ar[i])) + 1;
if(count>max){
max=count;
answer=ar[i]
}
}
이 부분이 너무 어려웠는데,
if문은 count가 max보다 커졌을 경우에만 실행된다.
관건은,
count = (ar.lastIndexOf(ar[i]) - ar.indexOf(ar[i])) + 1;
이 부분이었는데........
ar.lastIndexOf(ar[i]) 는
ar[i]인 요소 중 가장 마지막에 위치하는 자리이다.
ex) ar = [1,2,2,2,2,3,3,4] 에서 ar[2]인 요소는 2이고 2의 마지막 위치는 ar[4]이다.
ar.indexOf(ar[i])) 는
ar[i]인 요소가 가장 처음에 위치하는 자리이다.
ex) ar = [1,2,2,3,3,4] 에서 ar[2]인 요소는 2이고 2의 처음 위치는 ar[1]이다.
+ 1 을 해주는 이유는
현재 새의 종류가 적어도 1번은 등장했다는 것을 의미한다.
그렇기에,
ar[2]라면, 4-1+1 = 4가 되어 2가 4번 나왔다는 것을 알려준다.
count가 이 횟수보다 커지지 않으면 if문을 실행되지 않고,
2를 반환하게 되는 것이다.
다만 한 케이스에서 효율성에 걸렸다......
다른 방법을 찾아보는걸로.....
'코딩테스트.js > Hacker-Rank' 카테고리의 다른 글
2023.06.05) Migratory Birds (2) (0) | 2023.06.05 |
---|