알고리즘 문제 풀이/Javascript 24

[node.js] 백준 1449 수리공 항승

로직그리디 문제파이프에 문제가 생긴 곳이 담긴 array를 정렬첫 지점+ L 지점까지 첫 테이프 부착(변수명 record)다음 문제 지점이 record보다 작으면 그 전 테이프에 함께 수리가 됨record와 같은 경우 문제에서 0.5 만큼 간격을 줘야한다는 조건에 의해 새로운 테이프 필요다음 문제 지점이 record보다 크거나 같으면 테이프 개수 증가(cnt++) 후 새로운 record 기록const solution = (N,L,arr)=>{ let record = arr[0]+L; let cnt = 1; for (const num of arr){ if ( record>num) continue cnt ++; record = num+L } r..

[node.js] 백준 16401 과자 나눠주기

https://www.acmicpc.net/problem/16401로직이분탐색 활용과자를 사용하지 않아도 됨 => 최대값(end)을 과자 최소 크기로 설정하면 안됨생각해보니 end값을 Math.max(...arr)해서 (big O = N)의 연산으로 end값을 줄이고 시작하는게 좋겠다는 생각이 들어 수정// logicconst solution = (M,N,arr)=>{ const check = (M,value,arr)=>{ let cnt = 0; for (const len of arr){ cnt += Math.floor((len)/value); if (cnt>=M) return true; } return fal..

[node.js] 백준 8979 올림픽

https://www.acmicpc.net/problem/8979로직정렬 사용금,은,동 순서대로 중요도로 정렬정렬 완료 후 국가 K를 찾은 후, 같은 등수 나라가 있는지 확인하는 방식const solution = (N,K,arr) =>{ arr.sort((a,b)=>{ if (a[1] !== b[1]) return b[1] - a[1]; if (a[2] !== b[2]) return b[2] - a[2]; return b[3] - a[3]; }) for (let rank=0; rank=0;totalRank--){ const data = arr[totalRank]; if (gold === data[1..

[node.js] 백준 1309 동물원

로직동물을 윗 칸부터 아래로 채워가는 형태로 생각동물을 배치하는 방법은 기본적으로 3가지(배치x, 왼쪽 배치, 오른쪽 배치)배치를 안할 경우 윗칸에 동물 여부에 상관 없음왼쪽에 배치할 경우 윗칸에 배치가 안되었거나, 왼쪽에 배치되어 있어야 함오른쪽에 배치할 경우 윗칸에 배치가 안되었거나, 오른쪽에 배치되어 있어야함그렇기에 배치를 안한 경우의수, 왼쪽에 배치한 경우의 수, 오른쪽에 배치한 경우의 수를 계산해야함배치를 안한 경우의 수는 윗칸 모든 경우의 수(배치를 안한 경우 + 왼쪽에 배치한 경우 + 오른쪽에 배치한 경우)왼쪽에 배치하는 경우의 수는 윗칸에서 (배치를 안 한 경우 + 오른쪽에 배치한 경우)오른쪽에 배치하는 경우의 수는 윗칸에서 (배치를 안 한 경우 + 왼쪽에 배치한 경우)이를 누적해가며 계산..

[node.js] 1347 미로만들기

로직입력은 동작에 관한 정보뿐맵 크기를 모르기에 시작 좌표를 [51,51]부터 시작하여 명령에 따라 이동하는 좌표를 기록51,51인 이유는 동작이 총 50번이 일어나기에 0보다 작은 값이 안나오게 하기 위함좌표 기록을 row는 1000을 곱하여 1000*r + c 형태로 기록이후 기록된 좌표를 기준으로 맵을 그리는 방식const solution = (commands)=>{ const positionSet = (commands)=>{ let [minRow,maxRow,minColumn,maxColumn] = [51,51,51,51]; const dr = [1,0,-1,0]; const dc = [0,-1,0,1]; let [r,c,d] = [51,51..

[node.js] 16507 어두운 건 무서워

https://www.acmicpc.net/problem/16507로직누적합 활용누적합을 기록할 새로운 배열 생성시작지점부터 해당 좌표까지의 사각형에 포함되는 모든 값들의 합을 기록(arr[r][c] = arr[r-1][c] + arr[r][c-1] - arr[r-1][c-1] + data[r-1][c-1])const solution = (R,C,Q,data)=>{ const command = data.slice(R); const arr = Array.from({length:R+1},()=>Array.from({length:C+1}).fill(0)); const answer = []; for (let r=1;r {return str.split(' ').map(Number)});con..

[node.js] 1331 나이트투어 with Python

https://www.acmicpc.net/problem/1331구현A,B,C로 표현되는 column 좌표를 아스키코드 변경을 이용6*6사이즈의 이중 배열을 통해 방문 체크절대값을 이용하여 나이트의 이동에 맞는지 확인const solution = (size,array)=>{ const transPosition = (alpha,number)=>{return [alpha.charCodeAt()-65,Number(number)-1]}; const check = (r1,c1,r2,c2) => { const [gap1,gap2] = [Math.abs(r1-r2),Math.abs(c1-c2)] if (gap1>=3||gap2>=3||gap1+gap2 !== 3){return fa..

Javascript(nodejs) 백준 1756 피자 굽기

https://www.acmicpc.net/problem/1756로직구현문제화덕의 깊이, 피자의 크기는 30만피자가 들어올 때 마다 화덕을 탐색시 최대 30만 * 30만 = 900억번의 연산화덕의 구조가 밑이 아무리 넓어도 위가 좁으면 그 크기를 이용 불가그렇기에 현재 위치(해당 깊이)에 들어갈 수 있는 크기는 시작부터 현재까지의 최소값한번 위에서 피자를 집어 넣게되면 밑은 사용이 불가능한 구조화덕의 최소값의 변화를 기록하는 Array 생성(변수명 minArray)화덕의 최소값을 몇칸 사용 가능한지 기록(변수명 cnt)피자를 순회 돌며 지름과 minList의 마지막 값과 비교마지막 값보다 피자가 크면 맞는 크기가 나올 떄 까지 minList의 뒷부분 제거이번 피자를 넣을 수 있는 위치를 깊은곳부터 탐색이..

javascript(nodeJS) 백준 14719 빗물

https://www.acmicpc.net/problem/14719로직가로 세로가 500 * 500이면 그냥 2중 배열로 지도를 그려도 문제가 없음전체 지도에 블록이 해당 위치에 있으면 1, 없으면 0을 기록row와 col의 2중 반복문을 순회현재 높이에서 왼쪽, 오른쪽에 블록이 있다면 그 사이 공간만큼은 빗물이 차게됨개인적인 후기어제는 자바스크립트 -> 파이썬으로 코드 리팩토링을 진행했음오늘은 파이썬 -> 자바스크립트로 코드 리팩토링을 진행자바스트립트가 파이썬 대비 상대적으로 코드가 길고, 문법이 덜 익숙해 프로토타이핑하는데 시간이 오래걸림그렇기에 자스로 먼저 코드를 작성하는 것은 시간이 너무 오래걸린다고 판단자스에는 배열 순회 방법이 많은데, 이를 다시 확인하고 활용 방안에 대해 고민해야 함을 느낌F..