백준 5

[알고리즘] 백준 3107 IPv6

📖문제IPv6❓구상이 문제는 축약된 IPv6 주소를 원본으로 되돌리는 함수를 구현하는 문제이다.IPv6 주소는 32 자리의 16진수를 4자리씩 끊어 내기 때문에 입력값을 축약 전으로 돌리면 :(세미콜론) 은 7개가 존재해야하고,16진수 4자리 숫자는 총 8개가 존재해야한다.먼저 축약 조건을 확인해보면 아래와 같다.1. 각 그룹의 앞자리의 0의 전체 또는 일부를 생략 할 수 있다. 2. 만약 0으로만 이루어져 있는 그룹이 있을 경우 그 중 한 개 이상 연속된 그룹을 하나 골라 콜론 2개(::)로 바꿀 수 있다.3. 2번째 규칙은 모호함을 방지하기 위해서 오직 한 번만 사용할 수 있다. 예제 입력 2의 경우 주어진 입력이 "::1" 으로 축약되지 않은 형태로 출력하면 다음과 같은 결과가 나온다.→ 0000..

Algorithm 2025.04.08

[알고리즘] 백준 15992 1, 2, 3 더하기 7

📖문제1, 2, 3 더하기 7❓구상이 문제는 "1, 2, 3 더하기" 문제 시리즈중 7번째 문제다. 앞서 풀어본 "1, 2, 3 더하기" 문제는 모두 Dynamic Programming 알고리즘 유형이였기 때문에 비슷하게 접근을 해보려했다. 하지만, 여태 풀어본 DP 문제는 피보나치수열처럼 단순히 N번째의 DP 값을 구하면 되는 문제였는데 이 문제 같은 경우는 T개의 테스트 케이스개수가 주어지고, 그 아래로 T개의 n, m 의 쌍이 있다. 즉, 여태 풀어본 DP 문제는 n 과 m 이 주어지는게 아닌 n 이 주어져서 n번째 DP 값을 구하면 되는 문제였는데, 이번에는 1, 2 ,3 을 이용해 만들 수 있는 n의 갯수 + 1, 2, 3 숫자 m 개를 사용해서 n이 되도록 하는 문제인것이다. 어떻게 접근하면..

Algorithm 2025.02.20

[알고리즘] 백준 14651 걷다보니 신천역 삼 (Large)

📖문제걷다보니 신천역 삼❓구상N자리수의 숫자에서 0, 1, 2 만 가지고 만들 수 있는 3의 배수의 갯수를 출력해야 하는데 일정 패턴이 있는지 파악을 하면 동적 프로그래밍을 활용하면 문제를 풀 수 있을 것으로 생각된다. 우선, 입력값 N 에 따른 출력 갯수를 파악하기 위해 백트래킹으로 출력값을 파악해보기로 했다. 패턴파악을 위한 백트래킹을 사용한 코드.const result = [];const N = 10;const backTracking = (arr, line) => { if (line.length !== N) { const len = arr.length; for (let i = 0; i !(e % 3)).length % 1000000009);  출력위의 코드로 N이 2, 4, 5, ..

Algorithm 2025.01.02

[알고리즘] 백준 1904 01타일

📖문제01타일  ❓구상패턴의 개수를 파악하는 문제는 작은 규모의 패턴을 파악해서 해결하기 좋은 동적 프로그래밍(Dynamic Programming)계획법으로 풀기 적합한 문제이다.일반적인 이진법이라면 N이 1일때 0과 1을 만들 수 있기 때문에 2가 나와야하지만, 이 문제의 조건을 살펴보면 아래와 같다.1. 이진법을 구성할 때 1과 00의 조합으로만 구성을 해야한다.2. 0은 01 혹은 10 처럼 사용할 수 없고 0이 2개가 붙어있어야한다.주어진 N에 따라 표현될 수 있는 이진법의 종류를 알아보면 패턴을 파악할 수 있을것으로 기대된다. 🎲 패턴N이 1일때 부터 7일때 까지의 패턴을 파악한 결과 피보나치 수열처럼 dp[i] = dp[i-1] + dp[i-2] 의 패턴을 가지고 있음을 알 수 있다.이 것..

Algorithm 2024.12.26

[알고리즘] 백준 1003 피보나치 함수

📖문제1003 피보나치 함수  ❓구상피보나치 함수는 대표적인 동적 프로그래밍(Dynamic Programming) 계획법으로 풀 수 있는 문제이다.우선 문제를 보니 N번째 피보나치 수를 구하는 C++ 함수의 예제가 나와있다.일단 간단하게 생각하고 fibonacci(n) 에서 n이 0과 1인 경우를 카운팅하면 문제에서 요구하는 출력을 볼 수 있을 것으로 기대 된다.한번 코드를 살펴보자. 시도한 코드.const [T, ...arr] = require("fs").readFileSync("/dev/stdin", "utf-8").trim().split("\n").map(Number);const result = new Array(T);let line = [0, 0];const fibo = (n) => { if ..

Algorithm 2024.12.12