본문 바로가기

백준25

[그리디 #5] BOJ 14916 - 거스름돈 https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 접근 방법 간단한 그리디 문제이다. 5원과 2원 뿐이기 때문에 5원을 빼야하는 경우와 2원을 빼야하는 경우를 잘 생각해보자. 5원이 빠질 경우는 5원을 뺐을때, 나머지가 5으로 나누어떨어지거나 2로 나누어떨어지만 5원으로 결정. 2원이 빠질 경우는 2원을 뺐을때, 나머지가 2로 나누어 떨어지면 2원으로 결정. 코드 #include #include #include using namespace std; int n; int rest; int cnt; int main() { ios::sync_with_stdio(false).. 2024. 2. 9.
[👊DP뿌시기 #7-3] (BOJ 14002) 가장 긴 증가하는 부분 수열 4 https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1.. 2023. 8. 25.
[👊DP뿌시기 #7] (BOJ 11053) 가장 긴 증가하는 부분 수열 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤.. 2023. 8. 20.
[👊DP뿌시기 #3] (BOJ 14852) 타일 채우기 3 https://www.acmicpc.net/problem/14852 14852번: 타일 채우기 3 첫째 줄에 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다. www.acmicpc.net 문제 2×N 크기의 벽을 2×1, 1×2, 1×1 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다. 접근법 저번 문제와 비슷하지만 1X1 피스가 생기면서 개복잡해졌다. N=1인 경우와 N=2인 경우는 위 그림처럼 각각 2개, 7개씩 나온다. N=3인 경우는 일단 N=2에 가로1 피스를 더한 경우와 N=1에 가로2 피스 중 (2x1, 1x1) 제외한 피스를 붙인 경우를.. 2023. 8. 15.
[BOJ 1941] 소문난 칠공주 https://www.acmicpc.net/problem/1941 2차원 배열에서 연속된 것을 구한다는 점에서 bfs나 dfs로 구할 수 있을 것같다. 그러나 BFS와 DFS는 뻗어나가는 형식이기 때문에 이런 규칙이 적용되지 않는 경우는 찾기 힘들다. 그래서 이번 문제는 단순히 이차원 배열에서 인접한 것만 찾는 방법 대신 S가 Y보다 큰 조합을 뽑은 다음, 서로 인접해있는지 체크하는 방법을 사용해야한다. 따라서 이중 for문을 통해 이차원 탐색을 하는 대신, 일차원 배열에서 가능성있는지 탐구한다.예를 들어, 1번째 사람이 올 수 있는지 -> 2번째 사람이 올 수 있는지 -> ... -> 25번째 사람이 올 수 있는지이 과정에서 백트래킹을 이용해 여러 조합들을 뽑을 수 있다. 그렇기 때문에 아래와 같이 일.. 2023. 3. 28.
BOJ 1874] 스택 수열 [ 문제 이해 ] 입력 값 예) 3 5 1 2 4 - 1부터 n까지의 수를 순서대로 스택에 넣는다. (+출력) 스택 : 1 2 3 - 위를 하다 입력된 값과 같아지면 그 수를 스택에서 제거한다 (-출력) 스택 : 1 2 (3제거) 스택 : 1 2 4 (5제거) 이런 식으로... - 위 과정을 몇번해서 스택이 비워지고, 해당 수열이 완성되는 지 총 횟수를 출력한다 - 만약 위 과정을 진행하다 수열이 만들어지지 않으면 NO를 출력한다. [ 접근법 ] 1. 스택에 1부터 1씩 증가하면서 스택에 넣는다. 2. 입력받은 값이 스택의 top 과 같아지면 스택을 pop()한다. 3. 1,2 과정을 반복하다 스택이 비워지면 종료 4. 만약 위 과정 중 스택이 입력값이 스택의 topp()보다 크면 "NO" 를 출력하고 .. 2022. 12. 13.