알고리즘 문제 풀이 170

[python] 백준 15886 내 선물을 받아줘 2

로직설명을 어떻게 해야할까...커멘드는 E,W 두가지왼쪽부터 탐색시 E로 진행하다가, W를 만나는 순간 흐름이 바뀜W를 만나는 순간 선물을 하나 둬야함하지만 그 전칸도 W일 경우 추가 선물이 필요 없음def solution(N:int,cmds:str)->int: idx,cnt = 0,0 for idx in range(N): if cmds[idx] =='W' and cmds[idx-1] == 'E': cnt += 1 return cntN = int(input())cmds = input()ans = solution(N,cmds)print(ans)

[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..

python 백준 23801 두 단계 최단 경로 2

https://www.acmicpc.net/problem/23801로직다익스트라 알고리즘시작 지점에서 각 지점까지의 최소 거리를 구할 수 있음X지점 - P개의 중간 정점 중 한 지점 - Z지점 으로 이동X에서 다익스트라 = X부터 P에 속한 모든 지점 까지의 최단 거리 계산 가능Z에서 다익스트라 = Z부터 P에 속한 모든 지점 까지의 최단 거리 계산 가능모든 P에 속한 지점(p)에 대해서 X->p->Z의 값 = X->p + Z->pfrom heapq import heappush,heappopimport sysinput = sys.stdin.readlinedef dijkstra(start:int,N:int,graph:list[tuple[int]])->list[int]: INF = float('inf'..