반응형
문제 링크 : https://www.acmicpc.net/problem/14243
조건에 맞게 정렬하여 출력하면 되는 문제이다.
A는 언제든, B는 2번 중 1번, C는 3번 중 1번만 출력할 수 있다.
B가 출력될 수 있는 최악의 경우는 B-1 == A+C 일 때이다.
C가 출력될 수 있는 최악의 경우는 2*(C-1) == A+B 이다. 각각 B, C로 시작하여 B, C로 끝나는 경우이다.
이 경우를 제외하고는 C > B > A 순서로 출력하며 개수를 줄여간다.
위 조건에 해당되지 않는 상황이 발생하면 -1을 출력해준다.
#include <iostream>
using namespace std;
int A = 0, B = 0, C = 0, num;
int main() {
string s;
cin >> s;
int prev = 0, prev2 = 0;
char answer[100000];
num = s.size();
for(int i=0; i<num; i++){
if(s[i] == 'A'){
A++;
}else if(s[i] == 'B'){
B++;
}else{
C++;
}
}
for(int i=0; i<num; i++){
if(B-1==A+C && prev != 1 && B>0){
answer[i]= 'B';
prev2 = prev;
prev = 1;
B--;
}else if(2*(C-1)==A+B && prev != 2 && prev2 != 2 && C>0){
answer[i]= 'C';
prev2 = prev;
prev = 2;
C--;
}else{
if(C>0 && prev != 2 && prev2 != 2){
answer[i]= 'C';
prev2 = prev;
prev = 2;
C--;
}else if(B>0 && prev != 1){
answer[i]= 'B';
prev2 = prev;
prev = 1;
B--;
}else if(A>0){
answer[i]= 'A';
prev2 = prev;
prev = 0;
A--;
}else{
cout << -1;
return 0;
break;
}
}
}
for(int i=0; i<num; i++){
cout << answer[i];
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[HackerRank] RestAPI Certificate (0) | 2023.10.16 |
---|---|
[프로그래머스] Lv.3 인사고과 (JS) (0) | 2023.07.01 |
[프로그래머스] LV.5 상품을 구매한 회원 비율 구하기 (MySQL) (0) | 2023.04.21 |
[백준] 17298 오큰수 (C++) (0) | 2023.04.18 |
[프로그래머스] LV.3 숫자게임 (JAVA) (0) | 2023.04.18 |