문제https://www.acmicpc.net/problem/2003 풀이투포인터의 기본 문제이며, 주어지는 수열에서 연속된 수들의 합이 M이 되면 카운트를 올리는 문제이다. 이 문제에서 while 문을 이용해 반복해주는 부분이 있는데, 이 while 문의 조건에 원래는 lp 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n');const [n, m] = input.shift().split(' ').map(Number);const arr = input[0].split(' ').map(Num..
투 포인터
문제https://www.acmicpc.net/problem/2230 풀이전형적인 투 포인터 알고리즘을 이용해 두 수를 이용하는 문제다. 이 문제는 약간의 수학적인? 사고가 필요하다.입력으로 받는 수열의 경우 정렬되지 않은 상태이다. 이런 수열 그대로를 투 포인터를 이용해 문제풀이 한다면 모든 경우의 수를 탐색해야 하기에 시간복잡도가 커질 수 있다. 이런 문제는 수열을 오름차순으로 정렬해주면 해결할 수 있다. 위의 경우에서 m보다 두 수의 차가 커졌다고 생각하자. 그렇다면 현제 lp에서 rp가 오른쪽의 수는 탐색할 이유가 있는가? 절대로 없다. 이유는 차가 가장 작은 수를 찾아야 하기 때문에 rp가 증가해 현제 lp와의 차가 커지는 수는 탐색할 필요가 없기 때문이다. 코드const input = requ..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이이번 문제는 투 포인터 알고리즘 처럼 풀이할 수 있지만(링크), DP 알고리즘을 이용해 풀이했다. 우선 DP의 구조는 시작 지점과 끝 지점의 위치를 이용했다.DP[시작][끝] 이런 구조를 갖고 있으며, 이러한 구조는 시작 위치의 문자와 끝 위치의 문자가 일치하는지 true false로 구분해 저장한다. 코드const solution = (s) => { let answer = 1; const dp = Array.from({ length: s.length }, (_, i) => Array.from({ l..
문제https://level.goorm.io/exam/49060/%EA%B0%9C%EB%AF%B8-%EC%A7%91%ED%95%A9%EC%9D%98-%EC%A7%80%EB%A6%84/quiz/1 구름LEVEL난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.level.goorm.io 풀이투 포인터 문제이며, 슬라이딩 윈도우로 풀어볼까 생각했지만 입력되는 배열의 길이가 상당히 길어 모든 길이의 경우를 판단하기 힘들것 이라 생각해 투 포인터 알고리즘을 이용해 풀이했다. 코드에서 sol 함수가 메인 함수이며, 투포인터 알고리즘 답게 배열을 정렬한 뒤 lp와 rp를 0부터 시작해서 개미들간의 거리가 D 이하일 때 개미의 수가 가장 많은 수를 찾는 함수이다. 거리가 가깝다면 rp를 1 증가시..