Loading...

[프로그래머스] 로또의 최고 순위와 최저 순위 (javascript)

이미 맞춘 번호들 개수를 세줌 (최저) 0인 부분을 모두 더해줌 (최대) function solution(lottos, win_nums) { var answer = []; let cnt=lottos.length; //없는 번호만 lottos=lottos.filter(lotto=>win_nums.indexOf(lotto)===-1); cnt-=lottos.length;//맞춘 개수, 최저 맞춘 개수 let min=cnt; let max=cnt+lottos.reduce((acc,cur)=>{ if(cur===0)acc+=1; return acc; },0); // console.log(min,max) function rank(x){ if(x===6)return 1; else if(x===5)return 2; ..

[프로그래머스] 행렬 테두리 회전하기 (javascript)

function solution(rows, columns, queries) { var answer = []; const map=Array(rows).fill(0).map((_,i)=>Array(columns).fill(0).map((_,j)=>i*columns+j+1)); for(let i=0;i=x;j--){ next=map[yy][j]; map[yy][j]=cur; cur=next; if(minimum>cur)minimum=cur; } for(let i=yy-1;i>=y;i--){ next=map[i][x]; map[i][x]=cur; cur=next; if(minimum>cur)minimum=cur; } // console.log(map) answer.push(minimum); }

[프로그래머스] n 개의 최소공배수 (javascript)

최소공배수 초기값을 1로 잡고 배열의 각 수와 새로운 최소공배수를 구한다. function solution(arr) { var answer = 1; for(let i=0;i

[프로그래머스] 배달 (javascript)

function solution(N, road, K) { var answer = 0; const dist={};//양방향 정보 저장 for(let i=0;iArray(N+1).fill(-1));//1에서 갈 수 있는 지점 const pq=[[1,0]]; while(pq.length>0){ pq.sort((a,b)=>a[1]-b[1]);//비용 적은 순 리턴 const [v,cost]=pq.shift(); if(vis[1][v]==-1){//아직 방문 안되었다. 나중에 같은 점 방문하는 경우 항상 비용이 크다 vis[1][v]=cost;//지점 업데이트 for(let k=0;kK)continue;//거리가 k보다 크면 안된다. if(vis[1][next]==-1){//아직 방문 안한 곳이라면 진행 pq.p..

[프로그래머스] 점프와 순간 이동 (Javascript)

0에서 n까지 가는 dp문제이다. 처음에는 재귀로 dp 돌렸는데 거리가 n을 초과하거나 비용이 더 작을 때만 진행시켜도 시간 초과났다. 거리가 2배인 곳으로 순간이동하는 데 비용이 없어 최대한 순간이동 시켜주는 게 좋으므로 2의 배수라는 것을 처리해주기 위해 %연산자를 써서 n에서 시작해서 0 까지 가준다. 2이 배수가 아닐 때에는 순간이동해서 온게 아니므로 -1로 짝수로 이동해준다. function solution(n) { var ans = 0; while(n>0){ if(n%2==0){ n/=2; }else{ n-=1; ans+=1; } } return ans; }

[프로그래머스] 방문 길이 (javascript)

변을 기준으로 하는 bfs문제는 처음 풀었다. 방문 기준을 어떻게 해야할지 고민했는데 시작점과 끝점이 연결된 변을 방문 표시하기 위해서 (y,x,yy,xx)를 하나의 쌍으로 방문 배열에 넣고 같은 것이 있는지 찾았다. 만약 vis배열에 있다면 방문했던 곳이므로 answer를 증가시켜주지 않는다. function solution(dirs) { var answer = 0; let xpos=[0,0,1,-1];//DURL let ypos=[1,-1,0,0]; const dict={ 'D':0, 'U':1, 'R':2, 'L':3 }; let vis=[]; let y=5 let x=5; for(let i=0;i

[프로그래머스] 가장 먼 노드 (javascript, bfs)

연결리스트를 만들어준 다음 bfs를 돌면서 각 단계의 큐의 개수로 answer를 업데이트해줬다. (각 단계의 노드 개수) function solution(n, edge) { const list={}; for(let i=0;i

[프로그래머스] 파일명 정렬 (javascript)

javascript sort가 제자리 정렬이 아니어서 제자리 정렬을 하기 위해서 index정보를 저장한다음 정렬 조건에 추가해야된다는 것을 알게 되었다 정규표현식없이 for문을 돌면서 heade, number, tail을 분리했는데 계속 모든 예제가 통과되지가 않아서 일단 정규표현식으로 해봤다. 지쳐서 내일 다시 구현으로 분리해봐야겠다. function solution(files) { var answer = []; let newFiles=[]; for(let k=0;k{ let sa=a[1].toLowerCase(); let sb=b[1].toLowerCase(); if(sa===sb){ let na=Number(a[2]); let nb=Number(b[2]); if(na>nb)return 1; else..

[프로그래머스] 여행경로 (javascript, dfs)

function solution(tickets) { tickets.sort(); // 글자순 정렬 let vis=Array(tickets.length).fill(false); var answer = []; function dfs(cur,cnt,path){ if(cnt===tickets.length && answer.length===0){ //정렬했으므로 처음오는 경우의 수가 답 answer=path; return; } for(let i=0;i

[프로그래머스] 단속 카메라 (javascript)

1. 시작점을 기준으로 오름차순 정렬한다. 기준점은 시작점의 끝나는 지점이다. (end) 2. 만약 다음 배열의 시작점이 기준점(이전 지점)보다 먼저라면 범위가 겹치는 지점이다. 끝나는 점이 더 작은 걸로 end를 갱신한다. 3. 만약 다음 지점의 시작점과 기준점보다 크다면 범위가 겹치치 않는다. 현재의 end지점에 카메라를 설치하고 end를 새로운 범위의 끝점으로 갱신해라. 4. 반복 function solution(routes) { var answer = 1; routes.sort((a,b)=>a[0]-b[0]); let end=routes[0][1]; for(let i=1;i