알고리즘 테스트 ⏲
-
백준 알고리즘 1516. 게임 개발 문제 숌 회사에서 이번에 새로운 전략 시뮬레이션 게임 세준 크래프트를 개발하기로 하였다. 핵심적인 부분은 개발이 끝난 상태고, 종족별 균형과 전체 게임 시간 등을 조절하는 부분만 남아 있었다. 게임 플레이에 들어가는 시간은 상황에 따라 다를 수 있기 때문에, 모든 건물을 짓는데 걸리는 최소의 시간을 이용하여 근사하기로 하였다. 물론, 어떤 건물을 짓기 위해서 다른 건물을 먼저 지어야 할 수도 있기 때문에 문제가 단순하지만은 않을 수도 있다. 예를 들면 스타크래프트에서 벙커를 짓기 위해서는 배럭을 먼저 지어야 하기 때문에, 배럭을 먼저 지은 뒤 벙커를 지어야 한다. 여러 개의 건물을 동시에 지을 수 있다. 편의상 자원은 무한히 많이 가지고 있고, 건물을 짓는 명령을 내리..
[백준] 알고리즘 1516. 게임 개발백준 알고리즘 1516. 게임 개발 문제 숌 회사에서 이번에 새로운 전략 시뮬레이션 게임 세준 크래프트를 개발하기로 하였다. 핵심적인 부분은 개발이 끝난 상태고, 종족별 균형과 전체 게임 시간 등을 조절하는 부분만 남아 있었다. 게임 플레이에 들어가는 시간은 상황에 따라 다를 수 있기 때문에, 모든 건물을 짓는데 걸리는 최소의 시간을 이용하여 근사하기로 하였다. 물론, 어떤 건물을 짓기 위해서 다른 건물을 먼저 지어야 할 수도 있기 때문에 문제가 단순하지만은 않을 수도 있다. 예를 들면 스타크래프트에서 벙커를 짓기 위해서는 배럭을 먼저 지어야 하기 때문에, 배럭을 먼저 지은 뒤 벙커를 지어야 한다. 여러 개의 건물을 동시에 지을 수 있다. 편의상 자원은 무한히 많이 가지고 있고, 건물을 짓는 명령을 내리..
2021.07.23 -
알고리즘 2252. 줄 세우기 문제 N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다. 일부 학생들의 키를 비교한 결과가 주어졌을 때, 줄을 세우는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이다. 학생들의 번호는 1번부터 N번이다. 출력 첫째 줄에 학생들을 키 순서대로 줄을 ..
[백준] 알고리즘 2252. 줄 세우기알고리즘 2252. 줄 세우기 문제 N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다. 일부 학생들의 키를 비교한 결과가 주어졌을 때, 줄을 세우는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이다. 학생들의 번호는 1번부터 N번이다. 출력 첫째 줄에 학생들을 키 순서대로 줄을 ..
2021.07.23 -
[백준] 알고리즘 14852. 타일채우기 3 문제 2×N 크기의 벽을 2×1, 1×2, 1×1 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다. 예제 입력 1 1 예제 출력 1 2 예제 입력 2 2 예제 출력 2 7 예제 입력 3 3 예제 출력 3 22 다이나믹 프로그래밍의 2차원 배열 적용 문제. 타일 채우기 1 문항과 같은 알고리즘을 적용한다면 제한 시간 초과하여 비효율적인 문제가 발생. 타일의 N칸이 3칸 추가되는 경우부터는 두 경우의 나눌 수 없는 고유의 모양 배치가 계속해서 나타나므로 2차원적 다이나믹 프로그래밍 적용이 가능. 초기 값 arr[0][0], ..
[백준] 알고리즘 14852. 타일채우기 3[백준] 알고리즘 14852. 타일채우기 3 문제 2×N 크기의 벽을 2×1, 1×2, 1×1 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다. 예제 입력 1 1 예제 출력 1 2 예제 입력 2 2 예제 출력 2 7 예제 입력 3 3 예제 출력 3 22 다이나믹 프로그래밍의 2차원 배열 적용 문제. 타일 채우기 1 문항과 같은 알고리즘을 적용한다면 제한 시간 초과하여 비효율적인 문제가 발생. 타일의 N칸이 3칸 추가되는 경우부터는 두 경우의 나눌 수 없는 고유의 모양 배치가 계속해서 나타나므로 2차원적 다이나믹 프로그래밍 적용이 가능. 초기 값 arr[0][0], ..
2021.07.14 -
[백준] 알고리즘 2133. 타일 채우기 문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 2 예제 출력 1 3 힌트 아래 그림은 3×12 벽을 타일로 채운 예시이다. #include int arr[31]; int dp(int x) { if (x == 0) return 1; if (x == 1) return 0; if (x == 2) return 3; if (arr[x] != 0) return arr[x]; int result = 3 * dp(x - 2); for (int i = 3; i 1, (n - 2x) >= 0
[백준] 알고리즘 2133. 타일 채우기[백준] 알고리즘 2133. 타일 채우기 문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 2 예제 출력 1 3 힌트 아래 그림은 3×12 벽을 타일로 채운 예시이다. #include int arr[31]; int dp(int x) { if (x == 0) return 1; if (x == 1) return 0; if (x == 2) return 3; if (arr[x] != 0) return arr[x]; int result = 3 * dp(x - 2); for (int i = 3; i 1, (n - 2x) >= 0
2021.07.13 -
[백준] 알고리즘 11727. 2xn 타일링2 문제 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 2 예제 출력 1 3 예제 입력 2 8 예제 출력 2 171 예제 입력 3 12 예제 출력 3 2731 #include int i[1001]; int dp(int x) { if (x == 1) return 1; if (x == 2) return 3; if (i[x] != 0) return i[x]; return i[x] = (dp..
[백준] 알고리즘 11727. 2xn 타일링2[백준] 알고리즘 11727. 2xn 타일링2 문제 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 2 예제 출력 1 3 예제 입력 2 8 예제 출력 2 171 예제 입력 3 12 예제 출력 3 2731 #include int i[1001]; int dp(int x) { if (x == 1) return 1; if (x == 2) return 3; if (i[x] != 0) return i[x]; return i[x] = (dp..
2021.07.13 -
[백준] 알고리즘 11726. 2xn 타일링 문제 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 2 예제 출력 1 2 예제 입력 2 9 예제 출력 2 55 #include int i[1001]; int dp(int x) { if (x == 1) return 1; if (x == 2) return 2; if (i[x] != 0) return i[x]; return i[x] = (dp(x - 1) + dp(x - 2)..
[백준] 알고리즘 11726. 2xn 타일링[백준] 알고리즘 11726. 2xn 타일링 문제 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 2 예제 출력 1 2 예제 입력 2 9 예제 출력 2 55 #include int i[1001]; int dp(int x) { if (x == 1) return 1; if (x == 2) return 2; if (i[x] != 0) return i[x]; return i[x] = (dp(x - 1) + dp(x - 2)..
2021.07.13