728x90
https://www.acmicpc.net/problem/1343
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
접근 방법
매우 간단한 그리디 문제이다. 저번에 풀었던 거스름돈 문제와 같은 풀이로 해결이 가능하다.
https://parvegoongame.tistory.com/115
[그리디 #5] BOJ 14916 - 거스름돈
https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 접근 방법 간단한 그리디 문제이다. 5원과 2원 뿐이기 때문에 5원을 빼야하는 경
meteorfish.blog
조금 생각해야하는 점은 어떻게 String을 받아서 AAAA나 BB로 대체하는냐이다.
이는 간단하게 String을 돌면서 X의 갯수를 세어 저장하도록 설정하였다.
예) XXXX...XX....
-> 4 2
이렇게 X의 수를 저장하였다면 이를 AAAA나 BB로 대체하는 로직을 만들자.
AAAA로 대체하려면, 기존 X의 갯수에서 -4를 한 값이 4의 배수이거나 2의 배수여야 한다.
(예를들어 -4 한 값이 3이면 대체가 불가능하므로 -1을 출력해야함. )
마찬가지로 기존 X의 갯수에서 -2를 한 값이 2의 배수여야 한다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
string str;
vector<char> res;
vector<int> xCnt;
void addAAAA() {
for(int i=0;i<4;i++)
res.push_back('A');
}
void addBB() {
for (int i = 0; i < 2; i++)
res.push_back('B');
}
void addDot() {
res.push_back('.');
}
void replace(int rest) {
while (rest > 0) {
if ((rest - 4 >= 0) && ((rest - 4) % 4 == 0 || (rest - 4) % 2 == 0)) {
addAAAA();
rest -= 4;
//cout << "AAAA" << endl;
}
else if ((rest - 2 >= 0) && ((rest - 2) % 2 == 0)) {
addBB();
rest -= 2;
//cout << "BB" << endl;
}
else {
//cout << "rest : "<< rest << "<-EXIT" << endl;
cout << -1;
exit(0);
}
}
}
void solution() {
int idx = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == 'X') {
replace(xCnt[idx]);
i += (xCnt[idx++] - 1);
}
else {
addDot();
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> str;
bool flag = false;
int cnt = 0;
int idx = 0;
while (idx <= str.length()) {
if (idx == str.length() && flag) {
xCnt.push_back(cnt);
break;
}
if (str[idx] == 'X') {
cnt++;
flag = true;
}
else {
if (flag) {
xCnt.push_back(cnt);
cnt = 0;
flag = false;
}
}
idx++;
}
solution();
for (int i = 0; i < res.size(); i++)
cout << res[i];
}
728x90
'📊알고리즘 > BOJ' 카테고리의 다른 글
[그리디 #8] BOJ 1758 - 알바생 강호 (0) | 2024.02.11 |
---|---|
[그리디 #7] BOJ 13305 - 주유소 (0) | 2024.02.10 |
[그리디 #5] BOJ 14916 - 거스름돈 (0) | 2024.02.09 |
[그리디 #4] BOJ 1744 - 수 묶기 (1) | 2024.02.07 |
BOJ 2170 선 긋기 (1) | 2024.02.05 |