전체 글

전체 글

    [동적 계획법 1] [C++] 2156번. 포도주 시식

    www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 입력 첫째 줄에 포도주 잔의 개수 n이 주어진다. (1≤n≤10,000) 둘째 줄부터 n+1번째 줄까지 포도주 잔에 들어있는 포도주의 양이 순서대로 주어진다. 포도주의 양은 1,000 이하의 음이 아닌 정수이다. 출력 첫째 줄에 최대로 마실 수 있는 포도주의 양을 출력한다. 해결 방법 포도주를 마실 수 있는 방법은 어떻게 될까? dp를 n번째 잔까지 마실 때 가장 많은 양의 포도주, grape를 n번째 잔의 포도..

    [동적 계획법 1] [C++] 10844번. 쉬운 계단 수

    www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 입력 첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 출력 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. 해결 방법 우선 규칙을 찾을 필요가 있다. 길이가 1인 계단의 수는 몇 개가 있을까? 1 2 3 4 5 6 7 8 9 답은 9개 그럼 길이가 2인 계단의 수는? 10 12 21 23 32 34 43 45 54 56 65 67 76 78 87 89 98 답은 17개 규칙이 보이는가? 보이지 않아도 된다. (본인도 푸는데 오래걸렸으니... 이 문제 많이 어려웠..

    [코독하구만 팀] 2020.01.20(수) - 5주차 모임 결과

    [코독하구만 팀] 2020.01.20(수) - 5주차 모임 결과 고도현 - 이번 주차는 어려웠다. 개념적으로 학습이 덜 된 것 같다. 특히 A* 알고리즘에 대한 추가적인 정리가 필요하다. 알고리즘 개념 정리를 하면서 다시 볼 생각이다. 신희승 - 그리디 알고리즘은 동적 계획법과는 다르게 전체에서의 최적이 아니라 각 순간순간에서의 최적해를 이용하여 값을 구한다. 따라서 구한 값이 항상 최적은 아닐수도 있지만 dp보다 빠르게 결과를 만들어 낼 수 있다는 것을 알 수 있었다. 이동헌 - 복잡한 문제를 비교적 간단하고 반복적인 문제로 바꾸어서 효율적으로 문제를 풀수 있었다. 최현석 - Floyd-Warshall은 학기 수업 때 시험 비중이 낮아서 중요하게 보지 않았다. 그래서 이번 모각코에서 복습을 하며 전보다..

    [코독하구만 팀] 2021.01.20(수) - 5주차 개인 결과

    - 목표 - codekodo.tistory.com/33 [코독하구만 팀] 2021.01.20(수) - 5주차 개인 목표 - 목표 - 네트워크 유량을 계산하는 포드 풀커슨 알고리즘의 개념을 학습하고, 이를 정리한다. 위상정렬과 A* 알고리즘의 개념도 추가적으로 학습한다. 이후 실습 문제와 백준 문제를 통해 이를 codekodo.tistory.com 1. 위상 정렬 선행 과목이 있는 경우 선행 과목을 출력하고 이후에 연계된 과목을 출력하는 문제였다. 과목명이 처음에 주어지므로 이 과목명을 dict형으로 저장한다. M개의 입력 값에서 선행 과목, 후행 과목이 입력되는데 선행 과목이 있는 경우 이를 count 해준다. count가 0이면 이는 선행 과목이 없는 경우이다. 이후 BFS를 통해 과목 이수 순서를 탐..

    2. DFS(Depth-Find-Search) : 깊이 우선 탐색

    DFS(Depth-Find-Search) 깊이 우선 탐색 지난 시간 BFS에 이어 오늘은 DFS에 대해 알아보려고 한다. DFS는 Depth-Find-Search로 깊이 우선 탐색이다. BFS와 다르게 DFS는 깊이를 우선적으로 탐색한다. 즉 최대 깊이까지 재귀적으로 이동한 후 최대 깊이에 도달한 경우 옆으로 이동한다. 또한 BFS에서는 Queue를 사용했다면 DFS에서는 Stack을 사용한다. 이 Stack에 저장된 값이 우리가 원하는 DFS의 탐색 순서이다. 알고리즘 동작 방식 다음과 같다. 1. 특정 정점이 아직 방문하지 않은 정점인 경우 이를 방문처리 해준다. 2. 해당 정점과 연결된 다른 정점에 대해 위 과정을 반복한다. 다음과 같은 그래프가 주어졌을 때 DFS를 적용해보자. ① 시작 정점을 8..

    1. BFS(Breath-Find-Search) : 너비 우선 탐색

    BFS(Breath-Find-Search) 너비 우선 탐색 그래프의 탐색 방법 중 하나의 BFS에 대해서 살펴보려고 한다. BFS는 말 그대로 너비 우선 탐색, 즉 특정 Vertice에서 가장 가까운 Vertice부터 탐색한다는 뜻이다. 우선 BFS를 사용하기 위해서는 Queue가 필요하다. Stack, Queue, Heap에 대해서는 나중에 자세히 설명하기로 하고 Queue에 대해 간단하게 설명하자면 FIFO(First in First out - 선입선출)으로 동작하는 자료구조이다. 위에서도 말했듯이 BFS의 가장 큰 개념은 가까운 정점을 방문하되, 아직 방문하지 않은 정점인 경우 방문 리스트에 정점을 저장하면 된다. 이 방문 리스트가 우리가 원하는 최종적인 BFS의 탐색 순서이다. 알고리즘 동작 방식..

    [코독하구만 팀] 2021.01.20(수) - 5주차 개인 목표

    - 목표 - 네트워크 유량을 계산하는 포드 풀커슨 알고리즘의 개념을 학습하고, 이를 정리한다. 위상정렬과 A* 알고리즘의 개념도 추가적으로 학습한다. 이후 실습 문제와 백준 문제를 통해 이를 응용한다. 1. 위상 정렬 2. 정글의 법칙 3. 기름이 간당간당 4. 백준 2188번 - 축사배정 백준 2188번 - 축사배정 (www.acmicpc.net/problem/2188) 2188번: 축사 배정 농부 존은 소 축사를 완성하였다. 축사 환경을 쾌적하게 유지하기 위해서, 존은 축사를 M개의 칸으로 구분하고, 한 칸에는 최대 한 마리의 소만 들어가게 계획했다. 첫 주에는 소를 임의 배정해 www.acmicpc.net

    [코독하구만 팀] 2020.01.20(수) - 5주차 모임 목표

    [코독하구만 팀] 2020.01.20(수) - 5주차 모임 목표 고도현 - 네트워크 유량을 계산하는 알고리즘과 위상 정렬, A* 알고리즘의 개념을 학습하고 실습 문제와 백준 문제를 통해 이를 응용한다. 신희승 - Greedy Algoalgorithm에 대해 이해하고 아래의 백준 알고리즘 문제를 풀어보며 개념을 확립시킨다. 이동헌 - Divide & Conquer 방식을 복습하고 이를 응용한 알고리즘 문제에 적용해본다. 최현석 - Floyd-Warshall, Topological Sort 알고리즘을 복습하고 예제를 통해 적용한다. 고도현 - codekodo.tistory.com/36 신희승 - ciwekdo.tistory.com/11 이동헌 - blog.naver.com/tortoise11/22221536..

    [동적 계획법 1] [C++] 1463번. 1로 만들기

    www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 입력 첫째 줄에 1보다 크거나 같고, 10^6보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 해결 방법 우선 규칙을 찾아보자. 계산식의 경우 여러가지 경우의 수가 나올 수도 있다. N 연산 횟수 계산식 1 1 1 2 1 2/2=1 3 1 3/3=1 4 2 (4-1)/3=1 5 3 (5-1)/2/2=1 6 2 6/3/2=1 7 3 (7-1)/3/2=1 8 3 8/2/2/2=1 9 2 9/3/3=1 10 3 (10-1)/3/3=1 어떤 규칙을 찾을 수 있을까? 우선 수가 1씩 커질 ..

    [동적 계획법 1] [C++] 2579번. 계단 오르기

    www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 입력 입력의 첫째 줄에 계단의 개수가 주어진다. 둘째 줄부터 한 줄에 하나씩 제일 아래에 놓인 계단부터 순서대로 각 계단에 쓰여 있는 점수가 주어진다. 계단의 개수는 300이하의 자연수이고, 계단에 쓰여 있는 점수는 10,000이하의 자연수이다. 출력 첫째 줄에 계단 오르기 게임에서 얻을 수 있는 총 점수의 최댓값을 출력한다. 해결 방법 dp 문제이므로 점화식을 찾아야한다. 도착지점에 갈 수 있는 방법은 어떻게 될까? 두 ..

    [코독하구만 팀] 2020.01.13(수) - 4주차 모임 결과

    [코독하구만 팀] 2020.01.13(수) - 4주차 모임 결과 고도현 - 최단 경로를 탐색하는 알고리즘인 다익스트라 알고리즘의 개념을 정리하고 이를 응용할 수 있게 되었다. 신희승 - 동적 계획법을 이용하면 시간적으로 효율적이게 프로그래밍을 할 수 있다는 것을 알 수 있었다. 이동헌 - 위상 정렬의 정의와 풀이법에 대해 복습하였고 문제에 적용하여 해당 내용에 대한 이해도를 높일 수 있었다. 최현석 - 코드 시간복잡도를 줄이느라 애썼다. 코드의 간결화도 노력이 필요하다. 고도현 - codekodo.tistory.com/28 신희승 - ciwekdo.tistory.com/10 이동헌 - blog.naver.com/tortoise11/222206432603 최현석 - coderhs.tistory.com/6

    [코독하구만 팀] 2021.01.13(수) - 4주차 개인 결과

    - 목표 - codekodo.tistory.com/26 [코독하구만 팀] 2021.01.13(수) - 4주차 개인 목표 목표 : 최단 경로를 탐색하는 알고리즘인 다익스트라 알고리즘의 개념을 정리하고 관련된 실습 문제 3문제를 풀어본다. 이후 백준에서 관련된 문제를 풀어봄으로써 이를 응용하는 법까지 학습 codekodo.tistory.com 다익스트라란? 최단 경로를 탐색하는 알고리즘의 한 종류로 정점들 사이의 가중치를 비교하는 과정을 통해 최단 경로를 탐색한다. 해당 그림에서 정점과 간선의 가중치를 표로 나타내면 다음과 같다. 특정 행에서 특정 열로 이동할 때 발생하는 가중치를 나타낸 표이다. 인접하지 않은 경우 INF, 방향성에 의해 도달할 수 없을 때는 X로 나타내었다. A(여기로) B C D E F..

    [코독하구만 팀] 2020.01.13(수) - 4주차 모임 목표

    [코독하구만 팀] 2020.01.13(수) - 4주차 모임 목표 고도현 - 최단 경로를 탐색하는 알고리즘인 다익스트라 알고리즘의 개념을 정리하고 실습 문제를 풀어본다. 이후 백준에서 관련된 문제를 풀어봄으로써 이를 응용하는 법까지 학습한다. 신희승 - 3회차에 공부했던 Dynamic Programmin(동적 계획법)을 이용하여 백준 알고리즘 문제를 풀어보며 개념을 확립시킨다. 이동헌 - 위상정렬에 대해 복습하고 관련된 예제를 풀어보도록 한다. 최현석 - Greedy 알고리즘을 복습하고 예제를 통해 적용한다. 고도현 - codekodo.tistory.com/26 신희승 - ciwekdo.tistory.com/9 이동헌 - blog.naver.com/tortoise11/222206432603 최현석 - co..

    [코독하구만 팀] 2021.01.13(수) - 4주차 개인 목표

    - 목표 - 최단 경로를 탐색하는 알고리즘인 다익스트라 알고리즘의 개념을 정리하고 관련된 실습 문제 3문제를 풀어본다. 이후 백준에서 관련된 문제를 풀어봄으로써 이를 응용하는 법까지 학습한다. 1. 다익스트라 방향 가중치 그래프의 노드와 엣지가 주어졌을 때 방향 가중치 그래프를 그리고, 질의 노드 사이의 최단 거리 엣지 경로를 출력하시오. [입력 값] 6 7 A B C D E F A B 10 A C 15 B D 12 B F 15 C E 10 D F 1 F E 5 A E [출력 값] A C 15 C E 10 2. 벨만 포드 음의 가중치가 있는 방향 가중치 그래프의 노드와 엣지가 주어졌을 때 방향 가중치 그래프를 그리고, 질의 노드 사이의 최단 거리 엣지 경로를 출력하시오. 만약, 무한 루프가 발생할 경우 ..

    [동적 계획법 1] [C++] 1932번. 정수 삼각형

    www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 입력 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. 출력 첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다. 해결 방법 이전 문제였던 RGB 거리 문제와 유사하다. dp를 이용할 것이므로 점화식, 즉 규칙을 찾아내야 한다. 첫번째 행은 무조건 자기 자신을 택하므로 제외 두번째 행부터는 i) 가장 좌측 원소의 경우 이전 행의 가장 좌측 원소 ii) 가장 우측 원소의 경우 이전 행의 가장 우측 원소를 무..