천진난만 코딩 스토리

2023.06.04) Migratory Birds (1) 본문

코딩테스트.js/Hacker-Rank

2023.06.04) Migratory Birds (1)

Wisdom_1104 2023. 6. 5. 02:31

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