문제 링크 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 유형 DFS/ BFS 문제 풀이 공통) 각 정점과 연결된 정점의 번호를 2차원 배열 graph에 담는다. (정점이 여러 개인 경우에 정점 번호가 작은 것부터 먼저 방문해야하므로 연결된 정점의 번호를 오름차순으로 정렬했다.) [[], [2, 3, 4], [1, 4], [1, 4], [1, 2, 3], []] => 1번과 연결된 정점: 2, 3, 4 / 2번과 연결된 정점: 1, 4... stack, queue에..
문제 링크 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 문제 유형 다이나믹 프로그래밍 문제 풀이 반복문을 통해 (N - 2)층부터 0층까지 차례로 정수들을 방문한다. 현재 위치의 값 = (바로 아래층의 연결된 값중 최댓값) + (현재 위치의 값) 0층에 저장된 최대 경로에 있는 수의 합을 출력한다. 코드 const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = fs.readFileSync(filePath).toString()...
문제 링크 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 문제 유형 브루트포스 - 순열 문제 풀이 처음에 모든 순열을 차례로 다 구해서 나열하여 입력값의 순열의 다음 순열을 찾는 방식을 생각했다. 그러나, 순열은 최대 10,000개의 연속된 수로 있기에 시간초과가 날 것 같아서 다른 방법을 찾아야했다. 방법이 생각나지 않아 검색을 했다. C++에는 algorithm 헤더 파일을 넣고, 헤더 파일 내의 next_permutation 함수를 사용하면 현재 순열의 다음 순열을 구할 수 있다고 한다. JS에는 이런 내장 함수가 없기에, 직접 구현하여야 한다. 입력값으로 들어온..
문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 유형 정렬 (Lv.1) 문제 풀이 sort 메소드 파라미터로 compareFunction을 삽입해 정렬 순서를 정의했다. compareFunction (a, b가 비교되는 두 요소일때) compareFunction(a, b)의 반환값 0: b의 인덱스가 a의 인덱스보다 작도록 정렬한다. 문제에서 인덱스 n의 문자가 같을 경우에는 사전..
문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 유형 재귀 (Lv.2) 문제 풀이 자연수 N이 있을 때, N에서 2의 제곱인 수 중에서 N보다 작거나 같은 가장 큰 수를 뺀다. 이때, 2의 제곱의 지수에 해당하는 자리는 1이 된다. 재귀적으로 getBinaryLength 함수를 호출하여 2진수를 구하고, 2진수 중 1의 개수를 리턴한다. 자연수 N+1부터 반복하여 N의 2진수의 1의 개수와 같은 자연수를 찾는다. 코드 function solution(n) { // n의 최대 지수가 최대 인덱스 번호인 배열을 만든다. let arr = new..