Algorithm) Codekata_Day 9

김명성·2021년 7월 29일
0

Algorithm

목록 보기
9/61
post-thumbnail

❓ Question

숫자로 이루어진 배열에서 가장 자주 등장한 숫자를 k 개수만큼 반환

📝 My Solution

먼저 숫자 배열을 오름차순으로 정렬한다 (sort())
난 객체를 이용해서 문제를 풀 생각이어서
numsObj 라는 빈 객체도 하나 생성해준다.

예로 든 nums의 숫자를 보면
'-1' 이 2개 / '-3'이 3개 / '2'가 4개 / '3'이 2개다
이 값을 반대로 이용해 갯수를 객체의 키 값으로, 대상이 되는 값을 value로 넣는다.
그리고 기준이 될 갯수를 다시 numsLength 배열에 넣어주고,
숫자를 다시 세야하기 때문에 count를 0으로 리셋해준다.

객체가 완성 되면 다시 한 번 반복문을 돌려주는데,
기준이 될 갯수가 들어간 배열을 sort를 통해 오름차순으로 해준다.
가장 높은 수가 가장 마지막으로 갈 수 있도록 하기 위한 정렬이다.

그 후 맨 마지막 숫자를 '빼서' 객체의 키로 집어넣어서 해당하는 값을
result 배열에 넣어준다.


📝 Another Solution

new Set 함수를 이용해서 들어온 nums라는 인자에서
중복값을 제거해 기준이 되는 배열을 만들어준다.

반복문을 통해 nums를 arr 배열을 기준으로 해체하는 작업을 한다.
먼저 length라는 변수에는 arr 배열에 해당하는 숫자의 마지막 인덱스를 찾아와 +1을 한다
이렇게 하면 해당 숫자의 갯수를 확인할 수 있게 된다.

그 후, 길이를 담는 배열에 갯수를 push 하고, 다음 숫자의 갯수를 구하기 위해
nums를 잘라주는 작업을 한다.

숫자의 갯수가 담긴 배열에서 가장 큰 값을 찾아내고
기준이 된 arr 배열에서 같은 인덱스 값을 같는 숫자를 찾아 result에 넣어준다.
그 다음 숫자 갯수 담긴 배열의 가장 큰 값을 0으로 바꾸면서
다음 큰 값을 찾을 수 있도록 해준다.

▪️ Solution review

분명 set 함수를 사용해서 문제를 풀었던 적이 있던거 같은데
그걸 활용하지 않고, 다른 방법으로 문제를 풀어서 실제 풀이에 걸렸던 시간이
더 오래 걸린거 같아 좀 아쉬웠지만 그래도 항상 같은 방법이 아닌
여러 방법들을 하면서 좀 더 효율적인 방법을 찾는것도 좋은 상황이라 생각해본다.

profile
잠재력은 핵폭탄급 Frontend Developer

0개의 댓글

관련 채용 정보