Loading...

[프로그래머스] 쿼드 압축 후 개수 세기 (javascript)

주어진 범위 내에서 하나라도 다른 수가 있으면 시작위치를 기준으로 길이/2 만큼 y,x에 더해서 새로운 시작위치를 만들고 새로운 길이를 len/2로 해서 재귀함수로 던져준다. 중간에 주어진 범위에서 모든 수가 같다면 해당 수의 개수를 +1 더해주고 더 길게 들어가지 않고 len이 1이 되면 더이상 쪼갤 수 없으므로 해당 수를 +1더해주고 끝낸다. --- new 풀이! function solution(arr) { var answer = [0,0]; let n=arr.length; go(0,0,n); function go(y,x,len){ let cur=arr[y][x]; let pass=true; for(let i=y;i

[프로그래머스] 게임 맵 최단거리 (bfs, javascript)

dfs로 풀면 효율성 시간 초과가 난다. 최단 거리인 경우 bfs로 모든 경우의 수를 구할 경우에는 dfs 문제로 많이 갈리는 것 같다. function solution(maps) { let xpos=[0,0,1,-1]; let ypos=[1,-1,0,0]; var answer = -1; const q=[[0,0,1]]; while(q.length!=0){ let y=q[0][0]; let x=q[0][1]; let cnt=q[0][2]; q.shift(); if(y===maps.length-1 && x===maps[0].length-1){ answer=cnt; break; } for(let i=0;i

[프로그래머스] 최소값 만들기 (javascript)

최소값을 만드는 방법은 한 배열에서 남은 수 중 가장 작은 값과 다른 배열의 남은 수 중 가장 큰 값을 곱해서 더하는 것이다. 예제를 보고 눈치채서 이렇게 풀었다. function solution(A,B){ var answer = 0; A.sort((a,b)=>a-b); B.sort((a,b)=>b-a); answer=A.reduce((acc,cur,idx)=>{ return acc+A[idx]*B[idx]; },0) return answer; }

[프로그래머스] 숫자의 표현 (javascript)

function solution(n) { var answer = 0;//n=n for(let i=n;i>=1;i-=1){ let sum=0; let j=i; while(sum+j=1){ sum+=j; j-=1; } if(sum==n){ answer+=1; } } return answer; }

[프로그래머스] 타겟 넘버 (javascript)

인덱스를 1씩 더해 옮기면서 현재 수를 더하거나 빼주는 방식으로 완전탐색해주기 function solution(numbers, target) { var answer = 0; function subset(cnt,sum){ if(cnt===numbers.length){ if(sum===target){ answer+=1; } return; } subset(cnt+1,sum+numbers[cnt]); subset(cnt+1,sum-numbers[cnt]); } subset(0,0); return answer; }

[프로그래머스] 구명보트 (javascript)

최대 2명의 조건이 있다. 몸무게가 많이 나가는 사람을 기준으로 해야된다. 만약 여러명을 태울 수 있다면 while문안의 if문을 while로 수정하면 된다. function solution(people, limit) { var answer = 0; people.sort((a,b)=>a-b); let left=0,right=people.length-1; let sum=0; while(left

[프로그래머스] 괄호 변환 (javascript, 재귀)

괄호 방향을 "뒤집어라"를 reverse()로 오해했는데 ( 을 )로 (를 ) 로 바꾸라는 얘기였다. function solution(p) { if(p==='')return p; let sum=0; // 2단계 let u=""; let v=""; let right=true; for(let i=0;i

[프로그래머스] 메뉴 리뉴얼 (javascript)

하루종일 풀었다 휴 원래는 course 배열의 for문을 가장 바깥으로 하여 중첩 포문을 돌렸는데 시간 초과가 나서 조합을 따로 구해주고 모든 조합이 구해진 후 최대값을 갱신해주는 방식으로 중첩 for문을 분리시켰다. function solution(orders, course) { var answer = []; orders.sort((a,b)=>a.length-b.length); //크기 별로 정렬해놓는다. let dict={}; //조합의 결과가 들어갈 것이다. (문자열, 등장횟수)쌍 function comb(idx, s,len, str, visited,start){ //조합을 돌린다. if(idx===len){ //기준 길이(course[i]) str=str.split("").sort().join("..

[프로그래머스] 큰 수 만들기 (javascript, greedy)

배열에 넣으면서 새로운 수를 만나면 앞의 수와 비교해서 더 크면 이전 수를 삭제하고 현재 수를 넣어준다. function solution(number, k) { const arr=[]; for(let i=0;i0 && arr[arr.length-1]0){ k-=1; arr.pop(); } arr.push(number[i]); } arr.splice(number.length-k,k); return arr.join(''); }

[프로그래머스] 다트 게임 (javascript)

숫자 10만 예외 처리를 해주고 현재가 1이고 다음 수가 0일때는 10 (유일하게 두 글자인 숫자라 예외처리) 나머지는 주어진 조건대로 차근차근 수행한다. function solution(dart) { var answer = []; for(let i=0;i='0' && dart[i]acc+cur,0); }