문제 설명 https://www.acmicpc.net/problem/14501문제 풀이 방법이 문제는 DP를 이용한 풀이와 DFS를 이용한 재귀 함수로의 풀이가 가능한 문제이다.처음 이 문제를 봤을 때는 조합을 이용해 최대로 받을 수 있는 급여를 뽑아낸다 였지만, 이 문제에서 원하는 것은 근무일 수 혹은 상담 시간의 조합이 아니라 받을 총 급여의 최대값이라 DP를 이용해 풀었다. 나는 DP를 이용해 풀이를 진행해보았다. 최근 풀었던 가장 긴 바이토닉 부분 수열 문제에서 아이디어를 얻었다. 스케줄을 순회하며 급여를 체크하는 방향으로 설계했다. 이 문제에서는 주어진 스케줄의 역순으로 순회하며 값을 구했다.문제에서 처음 상담을 시작한 날짜에 따라 받게되는 급여의 최대값이 달라지기 때문이다. 정답 코드const..
코테준비
문제https://www.acmicpc.net/problem/11054풀이이번 문제는 DP를 이용한 LIS 알고리즘 문제이다.처음 이 문제를 보고 바이토닉 수열이라는 개념에 대해 이해하기 쉽지 않았다... 각 자리수에서 좌/우로 증가, 감소하는 수들의 개수의 최대값을 구하는 문제이다. 좌에서 우로 이동하며 증가하는 수의 연속과 우에서 좌로 이동하며 증가하는 수의 연속을 측정한다. 이 두가지 과정의 결과를 이용해 바이토닉 수열의 최대값을 구할 수 있다. 각 과정에서 나온 증가되는 수의 개수는 dp1, dp2에 담기며, 두 배열에서 인덱스가 같은 값들을 더해주고, 이 중 최대 값을 제출한다. 코드const input = require('fs') .readFileSync(process.platform ===..
문제 설명https://www.acmicpc.net/problem/13414문제 풀이 방법이번 문제는 중복 처리 알고리즘 문제이다. 원래는 객체 리터럴을 이용해 인덱스를 저장해 풀이를 진행했지만, 케이스가 길어지면 시간 초과 에러가 발생할 수 있다 생각했다. 그래서 Set 객체를 이용해 다시 풀어봤다. Set은 먼저 나온 요소만 저장하기 때문에 원본 요소의 뒤에 나온 중복 요소를 순서대로 처리할 수 있다.정답 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n')const [N, L] = in..

문제 설명 문제 풀이 방법 이번 문제는 슬라이딩 윈도우 알고리즘을 이용한 문제다. 처음 접한 알고리즘이기에 조금 어려웠다.... 아무리 해답을 봐도 이해가 좀처럼 되지 않았다....... 서로 비슷한 슬라이딩 윈도우 알고리즘과 투포인터 알고리즘은 조만간 정리해서 글로 작성해 공부하자. 우선 중복 되는 값을 처리하기 위해 Set를 만들어 준뒤, 나누는 수열의 길이는 1부터 주어지는 원소들의 길이와 같기 때문에 1부터 시작해 elements.length 까지 동작. 슬라이딩 윈도우 알고리즘의 특징은 기존에 있던 사이즈에서 새롭게 나타나는 부분과 기존에 있던 부분이 없이지는 점이있다. 이 문제에서는 숫자들의 합의 경우를 구하는 것이기 때문에 합에서 이전 합에서 가장 작은 인덱스의 값을 빼고 새로 들어올 인덱스..
문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/136797 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 방법 이 문제를 처음 봤을 때는 BFS를 이용한 최단 기간 로직을 이용해 답을 구하는 줄 알았다. 하지만 경우의 수가 양손으로 먼저 나눠 2, number의 길이가 10만이기에 2^100000의 경우의 수가 나오기 때문에 BFS로는 시간 초과가 발생할거 같다. 그래서 이전 계산 결과를 이용하는 DP 알고리즘을 이용하기로 했다. dp[i][j]에서 i는 왼손, j는 오른손의 ..
문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/176963 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 방법 객체 형식으로 name에 있는 이름들 마다 추억 점수를 할당해준다. 그리고 photo 배열에 있는 배열을 순회하며 점수를 측정해 반환한다. 완성된 코드 const solution = (name, yearning, photo) => { let answer = []; let list = name.reduce((acc, key, i) => { acc[key] = yearni..