
https://programmers.co.kr/learn/courses/30/lessons/42890 코딩테스트 연습 - 후보키 [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2 programmers.co.kr 처음 코드 function solution(relation) { function comb(l,n){ if(n{x.push(l[0]); return x}); let wo = comb(l.slice(1),n); return w.concat(wo..
function solution(expression) { let l = expression.split(/([*+-])/g); let op = [...new Set([...expression.matchAll(/([*+-])/g)].map(x=>x[0]))]; let f = {'*': (a,b)=>a*b, '-':(a,b)=>a-b, '+':(a,b)=>a+b}; //순열 function perm(l){ let ret=[]; for(let [i,x] of l.entries()){ let rest=perm(l.slice(0,i).concat(l.slice(i+1))); if(!rest.length) ret.push([x]); else rest.reduce((r,p)=>{p.push(x); r.push(p); ..

function solution(name) { // 1 let arr = [...name.matchAll(/[^A]/g)].map(x=>x.index); const dis0 = i => Math.min(i, name.length-i); //0과의 거리 const dis = (a,b) => { //a부터 b까지 돌기 if(a==b) return dis0(a); else if(a < b) return Math.min(dis0(a),dis0(b))+b-a; else return Math.min(dis0(a), dis0(b))+name.length+b-a; } let horiz = 0; if(arr.length==0) return 0; else if(arr.length==1){ horiz=dis0(arr[0])..

https://programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr 서로소인 w,h를 가로, 세로로 하는 정사각형에 대각선을 그었을때, 대각선이 지나가는 1,1 짜리 정사각형의 개수 구하는 방법 w,h가 서로소이기 때문에 h-1만큼의 가로선을 꼭지점이 아니라 저렇게 중간을 통과하게 지나감. 그래서 선이 지나가는 정사각형 개수는 기본 w 만큼에 h -1 개 중복되서 w+h-1 ( 가로, 세로 돌려서 생각..

문제 : 벽을 1번까지는 부수고 지나갈 수 있다는 조건이 추가되었을 때, BFS 알고리즘으로 미로에서 최단거리 찾기 해결방법 : 기존 BFS로 최단거리 찾는 알고리즘 + visited 배열을 (벽을 한 번도 안 뚫은 경우 - 1개까지 뚫은 경우 - .... - N개까지 뚫은 경우) 벽 부순 개수에 따라 나눈 3차원 배열로 만들어서 해결한다. 큐에서 꺼낸 지점의 상하좌우를 탐색할 때.. 1) 벽일 경우 아직 벽을 안 부수었으면 이 벽을 부수고 이동하는 케이스도 큐에 넣는다. (3차원 배열상에서 아래로 떨어지는 것처럼 이동) 2) 길일 경우 자기 층 내에서 일반 BFS 미로 찾기처럼 진행. node.js 코드 const readline = require('readline'); const rl = readli..