본문 바로가기

알고리즘/백준

(61)
백준 [16297] Eating Everything Efficiently DP + 위상 정렬 문제 수학적 센스가 필요한 문제다. DFS로도 풀 수 있다. https://www.acmicpc.net/problem/16297 16297번: Eating Everything Efficiently Margriet A. is in pizza heaven! She has bought a oneday access pass to Pizza World. Pizza World is a food festival, where all stands have their own special type of pizza. Margriet would really like to try many different types of pizza, but she thinks that www.acmicpc.net 문제를 요..
백준 [2637] 장난감 조립(JAVA) 2차원 dp 테이블을 이용했다. 완성품 즉, 엔드 포인트가 N이라고 했으니 이 N을 기준으로 각 부품들의 개수를 구해주면 된다. 각 중간 부품들과 완제부품들에 기본 부품이 몇 개나 필요한지 모두 적어보면 감이 잡힐 것이다. 코드 더보기 import java.io.*; import java.util.*; class Main { static int N, M; static int[] count; static int[][] dp; static ArrayList[] nodes; static StringBuilder answer = new StringBuilder(); public static void main(String[] args) throws Exception { input(); solve(); print(..
백준 [2065] 나룻배 단순 큐 문제여서 쉽게 생각했다가 한번 꼬이니 쭉 꼬여서 당황한 문제 처음엔 왼쪽과 오른쪽 큐를 만들어 독립적으로 관리했는데 이렇게 되다보니 현재 방향이 왼쪽이냐 오른쪽이냐 구분하는 코드로 너무 길어져서 큐 배열 2개로 만들어서 0, 1로 관리했다. 전체 코드 (스압 주의) 더보기 import java.io.*; import java.util.*; class TimeTable { int order; // 입력된 순서 int arriveTime; // 도착한 시간 public TimeTable(int order, int arriveTime) { this.order = order; this.arriveTime = arriveTime; } public int getOrder() { return order; }..
백준 [2589] 보물섬 c++ 기준 단순 bfs로 푼다면 100~120ms의 시간으로 풀 수 있지만, 그래프 지름에 대해서 생각해 본다면 더욱 빠르게 풀 수 있다. (20ms정도) 1이 육지, 0이 바다라고 하고 지도가 다음과 같다면 3가지 조건에 대해 생각해볼 수 있다. 1. 어떤 지점의 위, 아래에 땅이 있을 때 빨간 곳처럼 위 아래로 땅이 있는 경우, 해당 지역은 단순히 거쳐가는 지역이된다 실제로 찍어보면 알겠지만 해당 지점에서 시작한 거보다 그 위 아래에서 시작한게 더 크다 2. 어떤 지점의 좌우에 땅이 있을 때 이 부분도 마찬가지로 좌우에서 시작한게 해당 지역에서 시작한 거보다 더 크다 3. 상하, 좌우가 아닌 2갈래로 퍼지는 곳 위 오른쪽, 위, 왼쪽 처럼 x,y 축으로 한 방향씩 갈라지는 곳이다 사진처럼 아래, 오..
백준 [1806] 부분합 www.acmicpc.net/problem/2003의 응용 문제 사실 응용문제랄 것도 없이 if문 하나만 추가해주면 끝난다. 여기서 주의할 점은 부분합이 S 이상을 찾는 것이다. 부분합이 S인 경우만 찾으면 안 된다. 생각보다 간단하다. 합이 S 이상인 경우, 시작점과 마지막 점의 차이를 구한 후, 이 차이가 최소값이지만 판별해주면 된다. 더보기 #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, S, data, MINLEN = 0x7FFFFFFF; int start = 0, end = 0, sum = 0; vector v; cin >> N >> S; for (in..
백준 [11657] 타임머신 음수 사이클이 있는 벨만 포드 알고리즘 문제 음수 사이클 탐지 구현 다 해놓고 예제도 다 맞았는데 자꾸 틀려서 뭔가 했는데 이분이 올린 테스크 케이스들 보고 알았다. www.acmicpc.net/board/view/39180 틀린 코드 더보기 #include #include #include using namespace std; #define INF 0x7FFFFFFF vector v[512]; long long upper[512]; int Bellman(int N) { int i, size, there, thereCost; upper[1] = 0; for (i = 1; i > N >> M; for (int i = 0; i > A >> B >> C; v[A].push_back..
백준 [1707] 이분 그래프 (bfs) 같은 레벨의 정점끼린 같은 색, 인접 노드 끼리는 다른 색을 칠한다. 만약, 인접 노드가 자신과 같은 색이라면 이분 그래프가 아니다. 예를 들면, 정점이 4개인 임의의 그래프가 있다면, 칠하는 방식은 다음과 같다. (하얀색, 검은색) 하지만, 자신과 인접한 노드가 자기와 같은 색이 된다면 이분 그래프라 할 수 없다. 아래 그래프에서 3과 4가 연결 됐을 때, 3을 탐색 할 때, 인접 노드인 4를 검은색으로 칠해야 하는데, 4는 인접 노드인 3과 같은 하얀색이기 때문에, 이분 그래프라 할 수 없다. 반대로, 4부터 탐색한다 해도, 같은 문제가 발생한다. 여기서 주의할 점은, 주어진 입력이 비연결 그래프일 수 있기 때문에, V범위 전부를 탐색해야 한다. 따라서 시간 복잡도는 O(V + E)가 나온다. bfs..
백준 [11054] 가장 긴 바이토닉 부분 수열 이 두 문제를 풀었다면 쉽게 풀 수 있다. www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A..