728x90
반응형

전체 글 155

프로그래머스 - Level 2. 점프와 순간 이동 / JavaScript (js)

문제설명 문제분석 해당 문제는 주어진 거리 N을 0에서부터 순간이동과 점프를 이용하여 이동하며, 건전지 사용량이 최소가 되도록 하는 문제입니다. 순간이동은 현재까지 이동한 거리의 2배 만큼 거리를 이동하므로, 현재 위치를 2로 나누면서 이동하면서 필요한 점프 횟수를 계산하여 건전지 사용량을 구하면 됩니다. 이를 위해 아래와 같이 접근할 수 있습니다. 현재 위치를 나타내는 변수를 0으로 초기화합니다. N이 0이 될 때까지 while 루프를 돌며 다음을 수행합니다. 현재 위치가 짝수일 경우, 순간이동을 이용하여 이동합니다. 이때 건전지 사용량은 변하지 않습니다. 현재 위치가 홀수일 경우, 점프를 이용하여 한 칸 이동합니다. 이때 건전지 사용량은 1 증가합니다. 현재 위치를 2로 나눕니다. 현재까지의 건전지 ..

프로그래머스 - Level 2. 뒤에 있는 큰 수 찾기 / JavaScript (js)

문제설명 문제분석 입력 배열을 순차적으로 순회합니다. 이때 순회하는 요소를 기준으로 이 요소보다 값이 크고, 가장 가까운 요소의 값으로 현재 요소의 값을 업데이트합니다. 입력 배열을 순차적으로 탐색한다. 현재 인덱스의 요소를 기준으로, 이후에 나오는 배열의 요소 중 현재 요소보다 큰 값을 찾는다. 현재 요소보다 큰 값을 발견하면 해당 값으로 현재 요소를 업데이트한다. 현재 요소가 가장 큰 값인 경우 -1로 업데이트 한다. 문제를 단순화 했으니 이해하기 쉽게 코드를 짜보겠습니다. 이해하기 쉽게 코드작성하기 function solution(numbers) { // 모든 요소를 순회하며 업데이트 return numbers.map((x, i) => { const remains = numbers.slice(i +..

프로그래머스 - 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)

문제설명 문제분석 이 문제는 대진표를 탐색하면서 A와 B가 만날 때까지 걸리는 라운드 수를 구하는 문제입니다. 대진표는 계속 반으로 나누어지므로, 이진 탐색(binary search)을 이용하여 해결할 수 있습니다. A와 B가 만날 때까지 걸리는 라운드 수를 계산할 때, A와 B가 같은 그룹에 속하는지를 판단하면 됩니다. 두 참가자의 번호를 비교해서 둘 중 작은 번호가 짝수이고, 큰 번호가 작은 번호보다 1 크다면 같은 그룹에 속하는 것으로 볼 수 있습니다. 이 경우에는 두 참가자는 다음 라운드에서 서로 만나게 됩니다. 이해하기 쉽게 코드작성하기 function solution(n,a,b) { let answer = 1; // 같은 그룹(또는 b 가 짝수이고, 남은 참가자가 1이 큰 경우)에 속하지 않으..

프로그래머스 - 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

20230219

프로그래머스 스킬체크 Level 3 패스! 2월 19일 (일) Today I Learned 추천 알고리즘 관련하여 자문하던 일은 꾸준히 작성하여 어제 부로 잘 전달드렸다. 오늘은 프로그래머스 스킬체크 level 3를 달성했다. 아무래도 이제 level 2 문제를 풀고 설명할텐데 설명을 쉽게 하려면, 그보다 한 단계는 위에 있어야 할 거 같아서 공부를 좀 했다. 아, 링크드인 스킬 테스트도 JS와 nodejs 두 가지를 패스했다. Tomorrow I'll Learn 당분간은 내가 가진 역량을 잘 보여줄 수 있게, 이것저것 도전해봐야겠다. 당장 다음주를 위해 react hooks 부분과 js event loop를 준비해야 겠다.

Today I Learned 2023.02.19

프로그래머스 - Level 1. 키패드 누르기 / JavaScript (js)

문제설명 문제분석 이 문제는 모바일 키패드를 누르는 문제입니다. 정확히는 눌러야하는 번호에 따라 가까운 위치의 손을 기록하는 문제입니다. 왼쪽의 1, 4, 7은 왼손으로, 오른쪽의 3, 6, 9는 오른손으로 누르며, 가운데 2, 5, 8, 0은 두 손 중 가까운 손이 누릅니다. 이때 두 손의 거리가 같다면, 오른손잡이인지 왼손잡이인지에 따라 누르는 손이 결정됩니다. 거리는 키패드의 상하좌우를 한칸 이동할 때 1씩 증가하며, 가운데 번호를 누를 때에는 반드시 현재 손가락의 위치부터 눌러야하는 번호까지의 거리를 구해야 합니다. 따라서 현재 손가락의 위치를 기억하고 있어야 합니다. 문제가 조금 복잡한 관계로 풀어서 정리하겠습니다. 키패드는 가로 3, 세로 4로 정해져 있다. 키패드의 왼쪽 3개 숫자 1, 4,..

프로그래머스 - Level 1. 로또의 최고 순위와 최저 순위 / JavaScript (js)

문제설명 문제분석 - 수도코드 이 문제는 로또 당첨번호 중 N개의 번호를 확인할 수 없는 상태라는 전제 조건이 있습니다. 이 상황에서 이번주 당첨번호가 주어졌을 때, 가장 희망적인 경우와 그 반대의 경우의 당첨등수를 확인하는 문제입니다. 저 같아도 알아볼 수 없는 번호가 있다면, 이런 희망회로를 돌리면서 잠시나마 즐거운 상상을 할 것 같긴 합니다. 충분히 공감되는 김에 문제를 후딱 해결하도록 하겠습니다. 먼저 민우가 가지고 있는 로또 용지에서 번호를 확인할 수 없는 0으로 된 요소의 갯수를 기록한다. 민우의 로또용지를 순회하며 각 번호가 당첨번호인지 확인한다. 민우의 로또용지에서 당첨번호의 갯수와 알아볼 수 없는 번호를 더해 가장 높은 등수를 구한다. 민우의 로또용지에서 당첨번호의 갯수만으로 가장 낮은 ..

프로그래머스 - Level 1. 햄버거 만들기 / JavaScript (js)

문제설명 문제분석 이 문제는 입력값인 ingredient 요소를 하나씩 stack에 쌓고, stack에 쌓인 최근 4개가 햄버거를 만들 수 있는 순서대로 쌓여있는지 확인합니다. 만약 햄버거를 만들 수 있다면, stack의 4개를 빼내고 answer 카운트를 1증가합니다. ingredient를 탐색하며 stack에 하나씩 추가한다. stack에 쌓인 최근 4개의 요소로 햄버거를 만들 수 있는지 검사한다. 햄버거를 만들 수 있다면 stack의 최근 4개 요소를 제거하고, answer를 증가한다. 요약했으니, 코드를 짜보겠습니다. 이해하기 쉽게 코드작성하기 function solution(ingredient) { var answer = 0; const stack = []; for(let i of ingredi..

728x90
반응형