본문 바로가기

알고리즘119

[프로그래머스] 귤 고르기 https://school.programmers.co.kr/learn/courses/30/lessons/138476 리턴 값: k개씩 담을때 최소한 종류의 갯수 첫번째 풀이 function solution(k, tangerine) { var answer = 0; const obj = {}; let count = 0; for (const size of tangerine) { obj[size] = (obj[size] || 0) + 1; } // sort const sorted = Object.entries(obj).sort((a, b) => b[1] - a[1]); while (count < k) { count += sorted.shift()[1]; answer++; } return answer; } // .. 2023. 7. 18.
[프로그래머스] 숫자의 표현 https://school.programmers.co.kr/learn/courses/30/lessons/12924 첫 풀이 처음부터 하나씩 더해가며 합이 n이 되면 answer++ function solution(n) { var answer = 1; for (let i = 1; i n) { break; } } } return answer; } ➡ 정확성은 맞았지만 시간초과가 났다 첫번째 숫자 이후의 숫자는 Math.floor(n/2)+1이상일 수 없다 function solution(n) { var answer = 1; const half = Math.floor(n/2); for (let i = 1; i 2023. 7. 17.
[프로그래머스] 예상대진표 https://school.programmers.co.kr/learn/courses/30/lessons/12985 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남.. 2023. 7. 13.
[프로그래머스] 이진 변환 반복하기 https://school.programmers.co.kr/learn/courses/30/lessons/70129 1. 0제거 2. 0을 제거한 수 의 1의 갯수의 이진수 3. return [변화 횟수, 변화 과정 중 0의 총 갯수] function solution(s) { var answer = []; let changeCount = 0; let zeroCount = 0; // s가 "1"이 될 때까지 while(s.length > 1) { let zeros = 0; zeros += [...s].filter(e => e === '0').length; zeroCount += zeros const removedZeroLength = s.length - zeros; s = removedZeroLength.t.. 2023. 7. 13.
[프로그래머스] 짝지어 제거하기 (stack) https://school.programmers.co.kr/learn/courses/30/lessons/12973 첫번째 처음에 for 돌려서 str[i] , str[i+1] 같은게 나오면 splice한뒤 다시 첨부터 확인하는 방법을 생각했다 splice가 리턴하는건 잘라진 부분, splice는 원래를 바꿈 splice(시작 인덱스, 삭제 개수) 답은 다 맞았는데 n^2 여서 시간초과 생각해보니 내가 꼬아서 생각하고 있었다....=_= function solution(s) { const arrS = [...s]; while(arrS.length > 0) { let hasPair = false; for (let i = 0; i < arrS.length-1; i++) { // n // 짝이 있다 if (ar.. 2023. 6. 8.
[프로그래머스] 다음 큰 숫자 https://school.programmers.co.kr/learn/courses/30/lessons/12911 1씩 더해서 1의 갯수가 같을때 리턴 function getOneCount (n) { return [...n].filter(e => e === '1').length; } function solution(n) { var answer = 0; let newNum = n; const originalOneCount = getOneCount(n.toString(2)); while(true) { newNum++; if (getOneCount(newNum.toString(2)) === originalOneCount) { return newNum; } } return answer; } 배열 안에서 1의 갯.. 2023. 6. 8.