해시 알고리즘을 구현해내서 답을 구하려 했는데 생각보다 어렵다.
하다가 실패했다.
아래는 처음 구상도 및 코드
{
돌때마다 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로 출력하게 만들었다.
미처따 미처써
'🗃️javascript > 프로그래머스' 카테고리의 다른 글
평행 (0) | 2023.08.31 |
---|---|
겹치는 선분의 길이 (0) | 2023.08.31 |
K번째수(Lv.1)[sort()는 문자정렬임. 숫자 정렬도 문자열 정렬로 취급] (0) | 2023.06.20 |
n보다 커질 때까지 더하기(Lv.0)[함수 안에 조건달기] (0) | 2023.06.13 |
길이에 따른 연산(LV.0)[reduce((현재값, 누적공간, 인덱스)=> 식, 초기값)] (0) | 2023.06.10 |