알고리즘

    프로그래머스 코딩테스트 연습 - 무인도 여행 JavaScript

    이번 문제는 이차원 배열을 방문하면서, 연결된 유효한 값의 범위와 값을 구하는 문제이다. 기본적으로 dfs방식을 사용하였으며, 방문했는지 확인할 수 있는 값을 설정하여 문제를 해결하였다. function solution(maps) { // X는 바다, 숫자는 무인도 // 상하좌우로 연결된 무인도의 숫자의 합은 머물 수 있는 날짜 수 const answer = []; const checkValid = (x, y) => maps.length - 1 >= x && x >= 0 && maps[x].length - 1 >= y && y >= 0; const mapDfs = (visited, x, y) => { // x, y 방문 let sum = parseInt(maps[x][y]); visited[x][y] =..

    프로그래머스 코딩테스트 연습 - 시소 짝꿍 JavaScript

    처음에 작성한 코드는 다음과 같았다. function solution(weights) { let answer = 0; // 2 3 4 미리 구하기 const weightsObj = {}; weights.forEach(el => { if(!weightsObj[el]) { weightsObj[el] = [2, 3, 4].map(item => item * el); } }) for(let i = 0; i < weights.length - 1; i++) { const now = weightsObj[weights[i]]; for(let j = i + 1; j < weights.length; j++) { const weight = weights[j]; let checker = false; weightsObj[weig..

    프로그래머스 코딩테스트 연습 - 요격 시스템 JavaScript

    사실 이번 문제는 문제를 푸는데 애를 많이 먹었고, 검색을 통해서 어떻게 문제에 접근해야할지 알아보았다. 스스로 해결한 문제가 아니어서 아쉽지만, 이런 문제에서 당황하지 않고 어떻게 접근하면 좋을지 생각할 수 있었던 것 같다. function solution(targets) { let answer = 0; let prevRight = -1; const sorted = targets.sort((a, b) => a[1] - b[1]); for(let i = 0; i = prevRight) { prevRight = right; ans..

    프로그래머스 코딩테스트 연습 - 추억 점수 JavaScript

    이번에 푼 연습문제는 전에 풀었던 것 같은 유형의 문제로, 배열의 데이터를 가공하여 다른 주어진 데이터와 연관짓는 문제였다. 이번에 문제를 풀 때는 최대한 고차함수를 이용해보기로 하였다. function solution(name, yearning, photo) { const answer = []; const scoreObj = {}; for(let i = 0; i arr.length === 1 ? (scoreObj[arr[0]] || 0) : arr.reduce((acc, cur) => { let accTmp = acc; let curTmp = scoreObj[..

    프로그래머스 코딩테스트 연습 - 광물 캐기 JavaScript

    이번 문제는 탐욕법 알고리즘 문제로, 가장 피로도를 적게 사용하여 광물을 캐는 경우를 찾아야 한다. 광물은 순서대로 캐야하고, 순서를 바꿀 수 있는건 사용하는 곡갱이의 종류였다. 나는 이 문제를 해결하기 위해서 다음과 같은 방법을 생각했다. 1. 광물은 순서대로 캐야하므로, 순서대로 5개씩 묶어 생각한다. (하나의 곡갱이로 5개의 광물을 캔다) 2. 곡갱이 수 * 5 개의 광물만 고려한다. 3. 5개씩 묶은 광물들을 다이아몬드, 철, 돌의 개수에 따라 정렬한다. 4. 광물이 정렬되었으므로, 이제 다이아몬드 곡갱이부터 순서대로 사용하여 피로도를 계산한다. // picksTired 순서대로 다이아, 철, 돌 곡갱이의 각 광물을 캐는데 필요한 피로도 const picksTired = [{ "diamond": ..

    프로그래머스 코딩테스트 연습 - 덧칠하기 JavaScript

    붓을 이용하여 덧칠을 하는데, 최소한의 붓질만으로 덧칠을 하는 컨셉의 문제이다. function solution(n, m, section) { const check = (arr) => { let response = 0; while(arr.length > 0) { let start = arr.shift(); response++; while(arr[0] < start + m) { arr.shift(); } } return response; } return check(section); } 문제를 해결하기 위해서 생각해낸 컨셉은 앞의 덧칠이 필요한 부분을 시작으로 붓의 길이만큼을 고려하여, 덧칠을 한 뒤 다음 덧칠이 필요한 부분을 찾아 같은 로직을 반복하는 것 이었다. 사실, 이 로직만으로는 문제가 해결이 되지..

    프로그래머스 코딩테스트 연습 - 바탕화면 정리 JavaScript

    드래그를 하여 모든 파일을 선택할 수 있는 최소 영역을 구하는 문제였다. function solution(wallpaper) { let startX, startY, endX, endY; for(let i = 0; i i) { startX = i; } if(startY === undefined) { startY = j; } else if(startY > j) { startY = j; } if(endX === undefin..

    프로그래머스 코딩테스트 연습 - 대충 만든 자판 JavaScript

    이번 문제는 해결은 어렵지 않았으나, 처음 봤을 때 문제를 이해하기가 어려웠다. function solution(keymap, targets) { const answer = []; const keyMapObj = {}; keymap.forEach(el => { for(let i = 0; i i + 1) { keyMapObj[el[i]] = i + 1; } } }); for(let i = 0; i < targets.length; i++) { let count = 0; for(j of targets[i]) { if(!keyMapObj[j]) { count = -1; break; } count +=..