WHAT I LEARNED/Algorithm

[프로그래머스 / 자바스크립트] 폰켓몬

보니bonnie 2022. 1. 26. 15:04
728x90

오늘의 문제는 폰켓몬! 제목은 너무나도 귀엽지만 문제 글자수는 썩 귀엽지않은 문제다ㅎㅎ..

제일 다양한 포켓몬을 고를 수 있는 방법을 찾고 그에 해당하는 포켓몬 종류 번호의 개수를 리턴하는 문제.

 

 

입출력 예를 보니,

✔️일단 result의 최댓값은 nums.length / 2

✔️중복된 숫자 제거 먼저 진행해야 하나?

✔️그래서 result의 최댓값이 num.length / 2보다 크거나 작을 때로 구분해야하나?

이런 생각들이 들었다.

 

 

일단 배열 내 중복부터 제거하기로!

배열 내 중복 제거 방법은 여러가지가 있지만, 내가 선택한 방법은 Set!

먼저 new Set(nums)로 중복값이 있는 배열을 Set객체로 만들어서 중복을 제거하고,

[...set] Set객체를 다시 배열로 변환하였다.

전개연산자라고 하는 [...'set객체']는 Array.from() 또는 forEach() 문을 사용할 수도 있다고 한다.

출처: https://hianna.tistory.com/422 [어제 오늘 내일]

 

일단 잘못됐을지라도 결괏값을 받아놓고 기댓값과 어떤 수식 관계가 있을지 계속 생각해보았다.

✔️nums.length / 2값과 중복제거 배열인 arr의 length값과의 상관 관계를 발견했다.

nums.length / 2 < arr.length인 경우엔 nums.length / 2가 나오고, 그 이외의 경우에는 arr.length가 나왔다.

 

 

💡나의 코드

function solution(nums) {
    let arr = [...new Set (nums)];
    let answer = '';
    
    return answer = nums.length /2 < arr.length ? nums.length / 2 : arr.length
}

완성된 나의 코드! arr와 new_nums를 합쳐도 잘 돌아가는 것을  확인!

 

💪🏻사실 또 습관성 for문 해버렸다가 정신차리고 for문을 뺐다. for문을 사용할 때에 대한 공부가 필요한 것 같다..!🤨

 

💪🏻다른 분들은 nums.length / 2를 아예 따로 선언하고 코드에 넣어 활용했다.

동일한 내용이 들어가는 부분이 2개 이상일 땐 나도 따로 선언하고 코드에 넣어봐야겠다!.

 

 

💡수정 된 코드

function solution(nums) {
    let arr = [...new Set (nums)];
    return answer = nums.length /2 < arr.length ? nums.length / 2 : arr.length
}

이것저것 정리한 나의 코드!

💪🏻 answer값을 처음에 줄 필요도 없었다. for문 사용할 때 있어야해서 썼다가 그대로 남겨둬버림,,

for문시에만 처음 선언이 필요! 나머지는 다시 한 번 생각해보자!

 

!!습관성 for문, 습관성 초기값 금지!!

 

 

 

📍문제 출처

https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

 

728x90