반응형
23027번: 1번부터 문제의 상태가…?
큰일이다. 시험 문제를 본 쿠기는 1번부터 풀 수가 없다. 시험 시간 동안 할 일이 없었던 쿠기는 교수님께 편지를 쓰려고 한다. 작년 시험에서 교수님께 그동안 감사했다는 편지를 전하고 D+을 받
www.acmicpc.net
문제 이해 |
큰일이다. 시험 문제를 본 쿠기는 1번부터 풀 수가 없다. 시험 시간 동안 할 일이 없었던 쿠기는 교수님께 편지를 쓰려고 한다. 작년 시험에서 교수님께 그동안 감사했다는 편지를 전하고 D+을 받았던 기억이 있다. 그때 성적이 문제였는지, 편지가 문제였는지 궁금하여 이번에도 1번 문제의 답안 칸에 편지를 작성하려고 한다. 혹시나 하는 마음에 쿠기는 D+만은 피하고자 편지를 수정하려고 한다.
- 편지의 내용 S에 'A'가 있다면 S에 있는 'B', 'C', 'D', 'F'를 모두 'A'로 변경한다.
- 'A'가 없고 'B'가 있다면 S에 있는 'C', 'D', 'F'를 모두 'B'로 변경한다.
- 'A'와 'B'가 없고 'C'가 있다면 S에 있는 'D', 'F'를 모두 'C'로 변경한다.
- 'A', 'B'와 'C'가 모두 없다면 S에 있는 모든 문자를 'A'로 변경한다.
쿠기를 도와 편지를 수정하는 것을 도와주자.
아이디어 |
정규식을 활용하여 빠르게 문자열을 수정한다.
- c++의 regex 라이브러리를 활용한다.
- regex 참고
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
- 알파벳을 int형 배열에 바로 담을 수 있도록
각 자리별 문자에 'A'를 빼주어 A가 0이 될 수 있도록 한다.
int arr[26]={0};
for(int i=0;i<input.length();++i){
char now = input.at(i);
arr[now-'A']++;
}
코드 |
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string input("");
cin >> input;
int arr[26]={0};
for(int i=0;i<input.length();++i){
char now = input.at(i);
arr[now-'A']++;
}
regex rg;
string change;
if(arr[0]>=1){
rg = "[BCDF]";
change ="A";
}else if(arr[1]>=1) {
rg = "[CDF]";
change ="B";
}else if(arr[2]>=1){
rg="[DF]";
change ="C";
}else{
rg="[A-Z]";
change ="A";
}
input = regex_replace(input, rg,change);
cout << input;
}
Dev_cpdm
choppadontbiteme.tistory.com
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 17406 배열 돌리기 4 G4 (JAVA) (0) | 2022.03.09 |
---|---|
[BOJ] 2468 안전 영역 S1 (C++) (0) | 2022.03.03 |
[BOJ] 11723 집합 S5 (C++) (0) | 2022.02.22 |
[BOJ] 17204 죽음의 게임 S3 (JAVA) (0) | 2022.02.22 |
[BOJ] 9663 N-Queen G5 (JAVA) (0) | 2022.02.22 |