본문 바로가기

전체 글50

[스테이블 코인, 이미 시작된 돈의 미래] 카드, 모바일 결제 그리고 금융 네트워크20세기 후반부터 돈은 물리적 형태를 벗어나 신용 기반의 결제가 시작됐고, 비자와 마스터카드가 글로벌 네트워크를 구축했음21세기 들어 인터넷 뱅킹, 모바일 결제가 확산하면서 소비자 결제가 편리해짐하지만 해외 송금은 제자리걸음. 국제 송금의 90퍼센트 이상이 SWIFT(국제은행간통신협회) 네트워크를 거치며, 평균 2~5일이 소요되고 수수료가 최대 7퍼센트에 달함 -> 여전히 느린 글로벌 금융 인프라 웹3 생테계의 스테이블 코인블록체인의 개방성과 속도를 살리면서도 달러와 같은 안정성을 확보하는 방법 웹3 세계와 비트코인웹1: 정보를 '읽기'만 하는 인터넷인터넷을 켜먼 단순한 웹페이지가 하나 열리고, 거기에 글 몇 줄이 적혀 있는 게 전부웹2: 플랫폼 기업(페이스북, .. 2026. 2. 11.
[백준 7576] 토마토 풀이 이 문제는 출력하는 조건을 어떻게 구분할 것인지 고민을 했다.저장될 때부터 모든 토마토가 익어있는 상태이면 0을 출력토마토가 모두 익지는 못하는 상황이면 -1을 출력토마토가 모두 익을 때까지의 최소 날짜를 출력처음에는 아래와 같이 설계했다.- while문을 반복(시간을 1씩 늘려줌) - 모든 칸을 탐색하며 안익은 토마토의 개수를 세고, 익은 토마토를 큐에 담는다. - 만약, 안 익은 토마토의 개수가 0이라면, (시간-1)을 출력하고 종료. - while (큐가 빌때까지) - 익은 토마토의 인접한 토마토들을 익게한다. - 익은 토마토를 상태 배열에 저장한다. - 새롭게 익은 토마토의 개수를 센다. - 만약, (안익은 토마토가 있는데 새롭게 익.. 2026. 2. 8.
BFS / DFS 정리 알고리즘 설명BFSBFS는 넓이우선방식으로 그래프를 탐색하는 방법이다. 같은 레벨에 있는 노드들을 탐색한다. 그래서 최단경로를 찾는 탐색방법에 효과적이다.이를 구현하기 위해 큐를 생성하고 탐색한 노드들을 큐에 담는다. 큐가 빌 때까지 큐에 있는 노드들을 하나씩 꺼내면서 그래프의 범위를 확인하고, 방문 가능한 노드인지 확인한 뒤 탐색을 진행한다.DFS 구현import java.io.*;import java.util.*;public class Solution_for_1260 { static int N, M, V; static ArrayList> graph = new ArrayList(); static boolean[] visited; static StringBuilder sb; p.. 2026. 2. 7.
[백준 1535] 안녕 문제풀이 이 문제는 배낭문제 대표 유형이다.세준이의 체력은 100이고 기쁨은 0이다.만약, 세준이의 체력이 0이나 음수가 되면, 죽어서 아무런 기쁨도 못느낀다. 즉, 이때의 기쁨은 0이다.세준이는 각각의 사람에게 최대 1번만 말할 수 있다. 최대 기쁨을 구하기 위해 dp[][]를 사용한다. dp[n][j]의 의미는 현재 세준이의 체력이 j이고 n번째 사람까지 고려했을때 얻을 수 있는 최대의 기쁨이다. 문제를 풀면서 상황은 두가지로 나눌 수 있다.인사를 할 수 없는 경우(현재 세준이의 체력보다 n번째 사람에게 인사할 때 드는 체력이 더 큰 경우)인사를 할 수 있는 경우인사를 하는 것이 최대의 기쁨인지, 인사를 하지 않는 것이 최대의 기쁨인지 구분해 줄 필요가 있다. 인사를 할 수 없는 경우는 (j - n번.. 2026. 2. 3.
[백준 9084] 동전 풀이이 문제는 동전으로 금액 M을 만들 수 있는 모든 경우를 구하는 문제이다. 동전의 금액은 모두 다르며, 사용할 수 있는 동전의 개수에는 제한이 없다. 2차원 dp[][]를 채워나가는데 크게 두개의 상황으로 나뉜다.현재 동전을 사용하지 않는 경우현재 동전을 사용하는 경우현재 동전을 사용하지 않는 경우는 이전의 동전까지 고려했을때 금액 M을 만드는 경우의 수와 동일하므로 점화식은 아래와 같다.dp[n][m] = dp[n-1][m] 현재 동전을 사용하는 경우에는 현재 동전을 사용하지 않는 경우 + 현재 동전을 사용하는 경우 를 더해주면 된다. 여기서 현재 동전을 사용한다는 것은 만들어야 하는 금액 M이 있다면 (M-현재 동전의 금액)이 만들어야 하는 금액이 된다. 즉, 현재 동전은 무조건 선택해야하므로 금.. 2026. 2. 1.
[백준 2629] 양팔저울 어려웠던 부분 및 풀이배낭 알고리즘을 공부하면서 풀었던 문제이다. 그래서 배낭 알고리즘을 어떻게 적용해야 하는지 생각해야 했던 부분이 어려웠다.이 문제는 현재 추를 고려했을 때 만들 수 있는 무게의 차이를 구하는 dp문제이다. 추를 고려할 때 생각할 수 있는 선택지는 아래와 같다.사용하지 않는 경우사용하는 경우가벼운 쪽에 추를 올려놓은 경우무거운 쪽에 추를 올려놓은 경우예제로 설명해보면 아래와 같다.추의 무게는 1kg, 4kg, 6kg, 7kg 이다.현재 상태는 1kg이 왼쪽, 4kg이 오른쪽에 놓여있다. 현재 무게의 차이는 3kg이므로 3kg의 구슬의 무게를 확인할 수 있다. 다음에 고려할 추의 무게는 6kg이다.추를 사용하지 않는 경우에는 무게의 차이가 3kg으로 동일하다. 즉, dp[i][j] = .. 2026. 1. 31.
[백준 7579] 앱 어려웠던 부분처음 생각했던 풀이그리디- 처음에는 최소한의 비용으로 메모리 M이상을 확보하면 된다고 생각했다. 그래서 앱을 비용으로 오름차순 정렬하고 동일한 비용일 때는 메모리로 내림차순 정렬한 후에 앞에서 부터 하나씩 비활성화 하면서 메모리 M이상을 확보하면 답이라고 생각했다.하지만 이렇게 문제를 푼다면, 비활성화 하는데에 필요한 비용이 더 큰 앱 하나를 종료할 때가 답인 경우가 있다.앱메모리비용A61B61C1003위의 경우, 필요한 메모리가 100인 경우, 앱 C 하나만 종료하면 필요한 메모리를 모두 확보할 수 있으므로 답은 3이다. 하지만, 내가 생각한 그리디로 문제를 푼다면 5가 나온다. 그래서 이 문제는 배낭 알고리즘으로 접근해야 한다.다만, 배낭 알고리즘에서는 배낭에 물건을 담아 최대한의 가치를.. 2026. 1. 24.
[백준 1965] 상자넣기 어려웠던 부분점화식 세우는 부분점화식을 세울 때, 상자를 담을 수 있을때와 없을때를 구분해서 dp값을 갱신해야겠다고 생각했다.하지만, dp[현재상자]의 값을 dp[담을 수 없는 상자]로 갱신하여 dp의 값이 현재까지 증가하는 부분수열의 최대 길이를 의미하게 만들었다. 그러면, 이후에 현재상자보다 큰 상자가 나왔을 때, dp[현재상자] + 1 을 하게 되므로 올바른 상자의 개수가 아니게 된다. 아래는 내가 생각했던 점화식에 대한 반례이다.데이터34512 dp12334 그래서 담을 수 없는 상자인 경우 기존의 1을 그대로 유지해서 증가하는 부분 수열의 시작 부분임을 의미하게 해야한다.구현import java.io.*;import java.util.*;public class Solution_for_1965 {.. 2026. 1. 19.
다이나믹 프로그래밍 관련문제 증가하는 부분 수열 플랫폼링크요약풀이복습백준https://www.acmicpc.net/problem/1965증가하는 부분 수열 중에서 최대 길이 구하는 문제https://sen-zoo.tistory.com/45점화식 세우는 방법 배낭 알고리즘 알고리즘 설명배낭 알고리즘은 다이나믹 프로그래밍을 사용하는 대표적인 알고리즘 유형 중 하나이다.배낭 알고리즘은 최대한의 가치를 찾는데 쓰이는 알고리즘이다. 위 예시처럼 4개의 물건이 있고 각 물건은 무게와 가치를 가진다. 그리고, 물건들을 배낭에 담을 수 있는데 배낭에 담을 수 있는 최대 용량이 존재한다. 처음에는 이런 문제를 그리디 방법으로 접근했다. 무게당 가치가 높은 물건을 배낭에 담으면 배낭에 담을 수 있는 최대가치를 구할 수 있지 않을까? 라고 생각했다.. 2026. 1. 19.
누적합 알고리즘 알고리즘 설명 누적합 알고리즘은 배열에서 구간합을 구할 때 적은 비용으로 구할 수 있는 알고리즘이다.1252431보통 위와 같은 배열에서 합을 구하기 위해서는 인덱스0 부터 더하고자 하는 인덱스까지 모두 더해주어야 한다.예를들어, 인덱스 0 ~ 4까지의 합은 1 + 2 + 5 + 2 + 4 를 더해야 하고 인덱스 3 ~ 6까지의 합은 2 + 4 + 3 + 1 이 된다. 하지만, 누적합 알고리즘을 사용한다면 누적합 배열을 구하면 이후의 구간합을 구하는 연산은 O(1) 시간복잡도로 해결이 가능하다.구간합은 아래와 같다.13810141718여기서 인덱스 0 ~ 4까지의 합은 구간합배열[4] 가 되고, 인덱스 2 ~ 4 까지의 합은 구간합배열[4] - 구간합배열[1] 이 된다.즉, 구간합을 구한 뒤에는 빼기 연.. 2026. 1. 16.
백준 2632번 피자 판매 접근방법 문제에서 고려했던 부분피자 조각의 크기는 크기순으로 주어지지 않음2조각 이상 판매할 때, 피자조각이 연속되어야 함( -> 슬라이딩 윈도우?)연속되어야 한다는 부분에서 슬라이딩 윈도우 알고리즘을 떠올렸습니다. 그리고 경우의 수를 3가지로 나누어보면 아래와 같다.모두 피자 A인 경우모두 피자 B인 경우피자 A와 피자 B 혼합인 경우그래서 3가지 경우의 수 구한 뒤, 더해주면 되겠다고 생각을 했다.그리고 3번째 경우인 '피자 A와 피자 B 혼합인 경우'는 (A 경우의 수 * B 경우의 수) 이다. 어려웠던 부분 어려웠던 부분은 연속된 숫자들로 만들 수 있는 합을 구하는 것이었다. 피자가 마지막 조각에서 다시 첫번째 조각을 선택할 수도 있었기 때문에 나머지 연산(%)도 고려해야 한다고 생각했다. 하지.. 2026. 1. 15.
[백준 1719] 택배 접근방법플로이드 워셜 알고리즘을 공부한 뒤에 좀 더 깊게 이해하기 위해 백준에서 '알고리즘 분류'로 놓고 풀어보았던 문제이다. 그래서 접근방법은 당연하게 플로이드 워셜을 고르게 되었고.. 문제에서 '모든 경로에서 모든 경로까지의 최단경로'를 구해야 한다는 점, 노드의 개수가 플로이드-워셜 알고리즘의 적용 근거가 되겠다. 다만, 다른 플로이드 워셜 문제와는 다르게 비용을 구하는 것이 아닌 경로를 찾아야 하는 문제이다.어려웠던 부분경로를 갱신하는 부분에 있어서 이해하기 어려웠다.처음에 k로 갱신을 하면 되겠다고 생각을 했는데 문제 예제의 출력 결과 중에서 [1][6] 값이 다르게 나왔다.이 부분은 주말에 따로 시간을 내서 좀 더 깊게 생각해봐야 할 것 같다보충 설명- https://hvvan.tistory... 2026. 1. 13.