Algorithm(22)
-
[프로그래머스] 베스트앨범
ㅇㄹㅇㄹ 재생횟수가 많은 장르 순으로 노래 두 개씩 모아서 베스트 앨범을 만든다. 1. 장르 별 재생횟수 2. 장르 별 재생이 많이 된 노래 두 개 3. 재생횟수가 많은 장르부터 노래 두 개씩 앨범에 싣기 * 노래가 한 개라면 하나만 싣기 코드 주석으로 설명! function solution(genres, plays) { let answer=[] let json = [] //genres, plays배열을 {genre:~, play:~, idx:~} 형태로 변형 let hotMap = new Map() // 장르별로 재생횟수가 많은 순 idx 저장 let genreSum = [] // 장르 별 재생횟수 합 {genre:~, sum:~} let genreSet = new Set(genres) //장르의 종류..
2023.03.02 -
[프로그래머스] 폰켓몬
n개의 폰켓몬의 종류번호가 주어짐 [3,1,2,3] 처럼, 이 중 n/2개의 폰켓몬을 가져갈 수 있을 때 가장 많은 종류의 폰켓몬을 가져갈 때, 종류의 수 return 폰켓몬을 종류별로 나누었을 때, 만약, 종류의 수가 n/2보다 크다면 가져갈 수 있는 종류의 수는 n/2일 것이다. 만약, n/2가 종류의 수보다 크다면 가져갈 수 있는 종류의 수는 전체 종류 수 일 것이다. => n/2와 폰켓몬 종류의 수 중 더 작은 값을 return ! 해시를 사용해서 푼! function solution(nums) { let map = new Map() for(let i =0; imap.size?map.size:nums.length/2 } 생각해보니, 폰켓몬의 종류의 수만 구하면 되는 것!.... 더 간단히 set을..
2023.03.02 -
[프로그래머스] 완주하지 못한 선수
participant 배열에는 포함되지만, completion배열에는 포함되지 않은 선수 이름을 return 하는 문제 * participant가 completion보다 +1 길다 1. 두 배열을 sort 2. index 0부터 차례로 비교하여 값이 달라지는 index를 찾는다 3. participant[index]의 사람이 완주하지 못한 선수! function solution(participant, completion) { participant.sort() completion.sort() for(let i=0; i participant와 completion에 모두 있는 사람은 value가 0, participant에 만 있으면 value가 1이다. 3. map에서 value가 1인 key값을 retur..
2023.03.02 -
해시란? Map과 Object의 차이
해시해시 말은 많이 들어봤지만 정확히 무엇인지 모르겠어서 글로 정리해보고자 한다 !! 해시 테이블이란? key-value로 이루어져 값을 찾거나, 추가하거나, 제거하는데 빠름(배열보다) 순서가 없음(배열은 index로 순서가 있지만, hash는 아님) Js에는 Map, Object가 있음(객체에서는 key로 문자열만 사용 가능) Object의 키는 Strings이며, Map의 키는 모든 값을 가질 수 있음(객체, 함수도 가능) Object는 크기를 수동으로 추적해야하지만, Map은 크기를 쉽게 얻을 수 있다.(Map.size 속성) Map은 삽입된 순서대로 반복된다. 객체(Object)에는 prototype이 있어 Map에 기본 키들이 있다. (이것은 map = Object.create(null) 를 사..
2023.03.01 -
[프로그래머스] 괄호 회전하기
괄호가 맞게 열고 닫힌 문자열인지 확인하는 문제이다. "[({})]"이 입력값이라면, "({})][" 처럼 위치를 이동하며(원래위치로 돌아올 때 까지) 괄호가 제대로 열리고 닫힌 경우는 몇 번(횟수)인지 return 뒤 에서부터 비교한다고 하면 만약, 괄호가 "(" 다음 ")" 이라면 "({})" 순이라면 1. ")"와 "}"는 짝이 맞지 않음 > ")"을 체크해야 할 리스트에 저장 2. "}"와 "{" 짝 맞음 3. "(" 짝 없음, 하지만 체크할 리스트에 있는 ")"와 짝맞음 와 같은 방식으로 해결하였다. * dict에 "{", "(", "["가 key로 존재하지 않는 이유! 제대로 된 괄호라면 "}", ")", "]"가 먼저 나와서 check(체크해야 할 리스트)에 저장되어 있어야 함 functio..
2023.02.22 -
[프로그래머스] 직사각형 별찍기
가로가 n, 세로가 m인 직사각형 형태의 별을 출력하는 문제이다. repeat()을 사용하면 간단하게 해결할 수 있다. "반복할 문자열".repeat(반복횟수) 형태로 작성하면 된다! function solution(n, m) { return ("*".repeat(n) + "\n").repeat(m); } 이렇게 제출하였는데 오류가 발생하였다. 생각해보니 기본으로 주어지는 코드가 아래와 같았고 나는 오류인줄 알고, function solution으로 변경하여 풀었다. process.stdin.setEncoding('utf8'); process.stdin.on('data', data => { const n = data.split(" "); const a = Number(n[0]), b = Number(n[..
2023.02.22 -
[프로그래머스] 점프와 순간 이동
1. 앞으로 K만큼 이동 => 건전지 사용량 K 2. (현재까지 온 거리 * 2)위치로 이동 => 건전지 사용X => 2번 방법을 많이 사용하는 것이 유리! 2번 사용을 우선으로 하고, 어쩔 수 없을 때 1번을 사용하는 것으로 문제를 풀었다. 도착한 위치부터 0위치로 돌아간다고 생각했을 때, 위치가 짝수일 때는 2번 방법을 사용해서 절반만큼 돌아가고, (곱하기 2한 위치로 이동하니까) 위치가 홀수일 경우는 1번을 사용하여 1만큼 돌아갈 수 있다. 즉, 2로 나누어 떨어지면 사용량 0, 아니면 사용량 1이다. 예) 2500, 1250, 625, 624, 312, 156, 78, 39, 38, 19, 18, 9, 8, 4, 2, 1, 0 function solution(n) { let ans = 0; whi..
2023.02.20 -
[프로그래머스] N개의 최소공배수
function solution(arr) { var answer = 1; let yaklist = []; let yakjoin = []; arr.forEach((num) => { let newnum = num; let yak = []; var icopy = 0; // 약수를 구하는 코드 while (icopy !== 1 && newnum !== 1) { for (i = 2; i { let max = 1; yaklist.forEach((list) => { let listnum = list.filter((element) => nums === element).length; max = max > listnum ? max : listnum; }); answer *= nums ** max; }); return an..
2023.02.20 -
JavaScript의 match함수
match와 gi 대소문자 구분하지 않고 찾아줌 "aPple".match(/p/gi) //return ["P", "p"] match와 ? 만약 문자열에 찾으려는 단어가 없다면 null이 return된다. match가 return하는 값의 길이를 구하는 코드를 짰는데 match결과가 null이면 error가 발생한다. 반면, 물음표를 붙여주면 undefined로 처리되어 에러가 발생하지 않는다. "aPple".match(/g/gi).length; // TypeError: Cannot read properties of null (reading 'length') // at Object. (c:\Users\USER\Algorithm\level2\022js:1:33) // at Module._compile (no..
2023.02.13 -
[프로그래머스] 게임 맵 최단거리
DFS와 BFS에 관련된 문제이다. DFS는 전체를 경험하여 그 중 원하는 값을 포착하는 것 BFS는 경험하는 도중 원하는 값이 발견되면 바로 종료 가능 * 최단거리를 구할 때는 BFS다 !! 내 코드) 틀림! function solution(maps) { answer = 0; let m = maps.length; let n = maps[0].length; function getAnswer(x, y, val, list) { while (y val ? val : answer; } if (x < n - 1 && list[y][x + 1] == 1) { list[y][x + 1] = 0; ..
2023.02.12