🗃️javascript/프로그래머스

폰켓몬(Lv.1)[해시의 개념을 생각해보고, 단순히 구현하자]

하얀성 2023. 6. 20. 17:01

 

해시 알고리즘을 구현해내서 답을 구하려 했는데  생각보다 어렵다.

하다가 실패했다.

아래는 처음 구상도 및 코드


 

{

돌때마다 answer +1씩 추가.

정렬 하고.  맨 뒤의 값과 같은 모든 값들 제거 후  answer +1
단, answer이 N/2 까지만 값을 증가 시킬 수 있음.

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(nums) {
  let answer = 0;
  const sortedNums = [...nums].sort(); // 배열 복사 후 정렬
 
  for (let i = 1; i <= sortedNums.length / 2; i++) {
    let newNums = sortedNums.join(""); // 정렬된 배열을 문자열로 변환
 
    let selected = newNums[newNums.length - 1];
    
    if (answer + 1 !== sortedNums.length / 2) {
      answer += answer + 1;
    }
 
    newNums = newNums.split(`${selected}`); // 문자열을 배열로 변환 후 선택된 값 삽입
    selected = "";
  }
 
  return answer;
}
cs
function solution(nums) {
    var answer = [];
    var max = nums.length / 2;
        
    for(let i = 0; i < nums.length; i++) {
        if(answer.length < max) {
            if(!answer.includes(nums[i])) {
                answer.push(nums[i]);
            }
        }
    }
    
    return answer.length;    
}

난 해시 알고리즘처럼 앞 뒤를 제거하는 방식으로 풀려고 했는데.. 너무 복잡하게 접근한 것 같다.

includes()를 통해서 계속 이전의 선택한 폰켓몬 값과의 중복이... answer 안에 있나 비교하면서

answer의 한계 길이까지 폰켓몬을 넣어주면 되는 것이었다.

 

unction solution(nums) {
  const max = nums.length / 2;
  const arr = [...new Set(nums)];

  return arr.length > max ? max : arr.length
}

다른 사람의 문제풀이 이다. Set을 통해 고유한 값만을 arr에 넣어준다음 

배열의 길이가 더 길면 max를 더 짧으면 arr.length로 출력하게 만들었다.

미처따 미처써