본문 바로가기

백준13

[백준] 5557번 : 1학년 (C++) https://www.acmicpc.net/problem/5557 5557번: 1학년 상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀 www.acmicpc.net 숫자가 주어졌을 때, +나 -를 끼워서 만들수 있는 올바른 등식의 개수를 출력하는 문제이다. 문제에서 등식의 개수는 2^63-1 이하라고 명시되어 있으므로 long long형을 이용해야한다. 이 문제는 처음에 일차원 dp로 구현하였다. dp[i] : 현재 시점에서 계산값이 i가 나오는 경우의 수 n : 지금 입력받은 수 dp[i]>0 면, dp_copy[i+n]+=dp[i] or dp_co.. 2021. 8. 28.
[백준] 1303번 : 전쟁 (C++) https://www.acmicpc.net/problem/1303 1303번: 전쟁 - 전투 첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다. 그 다음 두 번째 줄에서 M+1번째 줄에는 각각 (X, Y)에 있는 병사들의 옷색이 띄어쓰기 없이 주어진다. 모든 자리에는 www.acmicpc.net 자주 나오는 유형으로, DFS를 이용하여 간단히 구현하였다. 설명은 생략 :) #include using namespace std; int N, M,W,B; char map[100][100]; int visit[100][100]; int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 }; int tmp; void solve(int x, i.. 2021. 8. 25.
[백준] 5430번 : AC (C++) https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제 자체는 쉬운것 같았다. 그냥 구현이겠거니 vector를 사용해서 reverse()함수를 통한 뒤집기를 해보니.... 시간초과가 떠버렸다. (이렇게 쉽게 풀릴리가 없지...) 다음으로 시도한 방식은 자료구조 덱(deque)을 사용하는 것이다. R이 나올때마다 매번 reverse를 하면 엄청나게 비효율적일 것이므로, 정방향인지 역방향인지 상태를 나타내는 bool형 dir변수를 두었다. dir가 true면 정방향이므로, D가 나올때 pop_front().. 2021. 8. 23.
[백준] 1041번 : 주사위 (C++) https://www.acmicpc.net/problem/1041 1041번: 주사위 첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 쓰여 있는 수가 주어진다. 위의 그림에서 A, B, C, D, E, F에 쓰여 있는 수가 차례대로 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, 쓰여 있는 수 www.acmicpc.net 주사위의 6개의 눈과 N을 입력받으면, 해당 주사위로 이루어진 N×N×N크기의 정육면체의 5개의 면에 쓰여 있는 수의 합의 최솟값을 출력하는 문제이다. 처음에는 3면이 보이는 주사위 갯수, 2면이 보이는 주사위 갯수, 1면이 보이는 주사위 갯수를 구하고, 각각 주사위의 3면,2면,1면의 최소합을 구해 곱하면 되는줄 알았다. 운이 좋게도, 테스트 케이스는 다 통과했지만 "틀렸.. 2021. 8. 22.
[백준] 1793번:타일링 (C++) https://www.acmicpc.net/problem/1793 1793번: 타일링 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 숫자 0 ≤ n ≤ 250이 주어진다. www.acmicpc.net 이 문제 점화식은 간단하다. 2x1칸이 오른쪽에 추가 되었을때, 새롭게 타일을 채우는 방법은 총 3가지 케이스이다. 추가 후 현재 타일이 2xN 이라고 할때, 1. 기존 2x(N-1) 타일 + 1개의 2x1 타일 2. 기존 2x(N-2) 타일 + 2개의 1x2 타일 3. 기존 2x(N-2) 타일 + 1개의 2X2 타일 즉, dp[N]가 2 X N 타일을 채우는 방법의 수라고 할때 점화식은 다음과 같다. dp[i] = dp[i-1] + dp[i-2] + dp[.. 2021. 8. 21.
[백준] 10819번 : 차이를 최대로 (C++) https://www.acmicpc.net/problem/10819 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 이 문제는 배열을 입력 받아 순서를 적절히 바꿔 |A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]| 값을 최대로 만드는 것이었다. 처음에는 DP문제인줄 알았으나 해결방법이 떠오르지 않았다. 생각을 해보니 N이 최대 8이기 때문에 완전 탐색, 즉 브루트포스로 구현이 가능할 것 같았다. 백트래킹을 통해 주어진 배열로 만들수 있는 모든 케이스에 대한 각 결과값을 계산하.. 2021. 8. 19.