Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- PS
- 내적
- SOH
- Vector
- 외적
- C++
- 다이나믹 프로그래밍
- 리눅스
- 문제풀이
- linux
- uclidean algorithm
- Expanding Polytope Algorithm
- Unity
- 백준
- c#
- 수학
- Graham Scan
- 보로노이다이어그램
- 분할축 이론
- dp
- ubuntu
- 알고리즘
- 유니티
- 충돌 알고리즘
- Doubly Connected Edge List
- 벡터
- AABB
- C
- GJK
- 우분투
Archives
- Today
- Total
마이 플밍 블로그
[C++]백준 14238 - 출근 기록 본문
코드
#include <iostream>
#include <queue>
#include <string>
#include <vector>
#include <math.h>
using namespace std;
int workerCount[3];
bool dp[51][51][51][3][3] = { false };
char ans[51];
bool DP(int a, int b, int c, int bbefore, int before) {
if (workerCount[0] == a && workerCount[1] == b && workerCount[2] == c) {
return true;
}
if (dp[a][b][c][bbefore][before])
return false;
dp[a][b][c][bbefore][before] = true;
if (a + 1 <= workerCount[0]) {
ans[a + b + c] = 'A';
if (DP(a + 1, b, c, before, 0))
return true;
}
if (b + 1 <= workerCount[1]) {
ans[a + b + c] = 'B';
if (before != 1) {
if (DP(a, b + 1, c, before, 1))
return true;
}
}
if (c + 1 <= workerCount[2]) {
ans[a + b + c] = 'C';
if (bbefore != 2 && before != 2) {
if (DP(a, b, c + 1, before, 2))
return true;
}
}
return false;
}
int main() {
string companyLog;
cin >> companyLog;
for (int i = 0; i < companyLog.size(); i++) {
if (companyLog[i] == 'A')
workerCount[0]++;
if (companyLog[i] == 'B')
workerCount[1]++;
if (companyLog[i] == 'C')
workerCount[2]++;
}
if (DP(0, 0, 0, -1, -1)) {
for (int i = 0; i < companyLog.size(); i++) {
cout << ans[i];
}
}
else {
cout << -1;
}
return 0;
}
'문제풀이 > 백준' 카테고리의 다른 글
[C++]백준 2481 - 데스노트 (0) | 2022.01.10 |
---|---|
[C++]백준 11559 - Puyo Puyo (0) | 2022.01.09 |
백준 16930 - 달리기 (0) | 2022.01.04 |
백준 1806 - 부분 합 (0) | 2022.01.02 |
백준 12851 - 숨바꼭질2 (0) | 2021.11.27 |