728x90
반응형

Level 2 8

프로그래머스 - Level 2. 무인도 여행 / JavaScript (js)

문제설명 문제분석 이 문제는 입력 maps의 모든 요소를 순회하면서 상하좌우의 숫자로 이어진 구간의 합을 배열에 담아 리턴하는 문제입니다. bfs, dfs 모두 사용할 수 있지만 dfs를 사용할 경우 스택오버플로우가 날 수 있기때문에 bfs로 접근하도록 하겠습니다. 이해하기 쉽게 코드작성하기 function solution(maps) { const answer = []; const isVisited = new Array(maps.length).fill(0).map((x) => new Array(maps[0].length).fill(false)); const isNotVisitedIsland = (r, c) => isVisited[r][c] === false && maps[r][c] !== 'X' cons..

프로그래머스 - Level 2. 덧칠하기 / JavaScript (js)

문제설명 문제분석 먼저 단순하게 접근해 모든 벽을 칠할 때 필요한 count를 세아리는 방법으로 접근합니다. function solution(n, m, section) { const wall = Array.from({ length: n + 1}).map((_, i) => section.includes(i) ? false : true); let count = 0; for(let i = 1; i paintedWall) { answer++; paintedWall = wall + m - 1; } } return answer; } section에 포함된 요소는 페인트 칠이 필요한 벽입니다. 따라서 이 벽부터 시작해서 m칸 만큼 칠하고 count를 올립니다. section의 이전요소에서 칠해진 벽을 (현재 벽 + ..

프로그래머스 - Level 2. k진수에서 소수 개수 구하기 / JavaScript (js)

문제설명 문제분석 이 문제는 (1) 입력값 n을 k진수로 변환해서 조건에 맞는 정수를 얻는 문제와 (2) 각 정수들이 소수인지 판별하여 길이를 리턴하는 문제로 나눌 수 있습니다. 간단한 문제이니 바로 코드를 작성해보겠습니다. 이해하기 쉽게 코드작성하기 function solution(n, k) { const numbersAfterConvertToBaseK = Number(n).toString(k).split("0"); return numbersAfterConvertToBaseK.filter(x => isPrimeForStrNum(x)).length; } function isPrimeForStrNum(strNum) { if( strNum === "" || strNum === "1" || strNum.inc..

프로그래머스 - Level 2. 행렬의 곱셈 / JavaScript (js)

문제설명 문제분석 이 문제는 행렬의 곱을 알면 해결할 수 있는 문제입니다. 행렬의 곱을 실행하고 난 뒤의 결과물 총 크기는 arr1의 row 갯수, arr2의 col 갯수로 이루어진 2차원 배열(행렬)입니다. 뿐만 아니라 행렬의 곱은 다음과 같은 순서로 이루어져 각 요소별로 곱셈과 덧셈이 이뤄지게 됩니다. 조금더 복잡하지만 명확하게 각 요소별 값을 구하면 다음과 같습니다. 각 요소에 대해 a_ik와 b_kj의 스칼라 곱의 총 합을 구하면 됩니다. 이해하기 쉽게 코드작성하기 function solution(arr1, arr2) { const answer = new Array(arr1.length).fill().map(() => new Array(arr2[0].length).fill(0)); for(let ..

프로그래머스 - Level 2. 멀리 뛰기 / JavaScript (js)

문제설명 문제분석 이 문제는 다이나믹 프로그래밍(DP)을 사용하여 해결할 수 있습니다. 문제에서는 1칸 또는 2칸을 뛰어서 n칸을 뛸 수 있다고 하였으므로, n칸을 뛰기 위해서는 (n-1)칸에서 1칸을 뛰는 경우와 (n-2)칸에서 2칸을 뛰는 경우의 합과 같습니다. 이를 점화식으로 나타내면 다음과 같습니다. f(n) = f(n-1) + f(n-2) 이해하기 쉽게 코드작성하기 function solution(n) { let answer = 0; let num1 = 1, num2 = 2; if (n

230214

프로그래머스 문제를 풀다보니 생각보다 재밌다. 가끔 수정할 거 없이 잘 나온 코드가 있는데, 블로깅을 할까말까 고민한다. 근데 이런 문제는 언제든 만나면 비슷한 코드가 나올 거 같으므로 패스하는 게 낫겠다 싶다. (딱히 배울 게 없다) 2월 14일 (수) Today I Learned 오늘은 면접도 보고오고, 작업도 좀 했다. 그러나 골자는 프로그래머스 문제풀기다. 프로그래머스 level 0부터 시작해서 도장깨기 하고 있다 Lv.1이 5문제 남았다. 곧 Lv.2만 푸는 단계로 진입할 거 같다. Tomorrow I'll Learn 데이터 작업 마무리 및 컨펌 요청 추천 알고리즘 모식도 작성 프로그래머스 문제 풀기

Today I Learned 2023.02.15

프로그래머스 - Level 2. 모음 사전 / JavaScript (js)

문제설명 문제분석 지금까지 업로드한 코테 문제는 전부 완전 탐색 카테고리에 포함되어 있습니다. 그래서 당연히 이 문제도 완전 탐색일거라 생각했는데... 왠걸요. 이 문제는 일반항을 구할 수 있으면 훨씬 간단하게 풀 수 있는 문제입니다. 먼저 이 문제는 제한 조건이 있고, 일련의 규칙을 갖는다는 게 어렴풋이 느껴집니다. 그럼 뭐 별 수 있나요. 머리로 하든 손으로 하든 규칙을 찾기 위한 노가다 시작입니다. 먼저 가장 작은 경우부터 확인합니다. 맨 마지막(5번째) 자리의 모음의 인덱스가 커지려면 카운트가 1씩 늘어납니다. 그 다음은 4번째 자리의 모음의 인덱스가 커지는 경우입니다. 가장 마지막 자리의 모음 인덱스가 전부 존재하는 경우는 5가지이고, 존재하지 않는 경우 1가지를 더해 총 6가지가 존재합니다. ..

프로그래머스 - Level 2. 전력망을 둘로 나누기 / JavaScript (js)

문제설명 문제분석 각각의 송전탑을 노드라고 생각하면, 각 노드와 간선의 관계를 이루고 있는 기존 n개의 송전탑이 주어집니다. 이때 간선을 하나씩 제거해가면서 분리된 두 개의 그룹에 포함된 노드의 차를 구하고, 구해진 결과 중 최솟값을 리턴하는 문제입니다. 문제가 어려우니 조금 나눠서 적어보겠습니다. 모든 노드는 간선으로 이어져 있다. 각 노드는 최소 1개 이상의 간선이 존재한다. 노드와 노드를 이어주는 간선을 하나 제거하고, 이때 분리된 그룹의 노드 수를 비교한다. 결과값은 비교한 값 중에서 가장 작은 값이어야 한다. 문제를 단순화 했으니 이해하기 쉽게 코드를 짜보겠습니다. 이해하기 쉽게 코드작성하기 이 문제는 여러 방법으로 접근할 수 있습니다. 기본적으로 그래프의 모든 노드를 탐색해야하는 문제인 만큼 ..

728x90
반응형