한다 공부
[C++] 백준 알고리즘 3613번 Java vs C++ 본문
문제가 많이 긴데
결론은 문자열을 자바스타일에서 c++스타일로,
혹은 그 반대로 변환하면 되는 문제다
c++ 스타일의 문자열은 소문자와 언더바로 구성되는데
이 언더바가 오류를 많이 발생시킨다.
_c도 에러 (시작이 언더바)
c_도 에러 (마지막도 언더바)
c__c도 에러다. (언더바가 두 번 나와도 에러)
#include<iostream>
using namespace std;
string ctoj(string name) {
string j;
for (int i = 0; i < name.length(); i++) {
if (name[i] == '_') {
j += name[i + 1] - 32;
i++;
}
else
j += name[i];
}
return j;
}
string jtoc(string name) {
string c;
for (int i = 0; i < name.length(); i++) {
if (name[i] >= 'A' && name[i] <= 'Z') {
c += '_';
c += name[i] + 32;
}
else
c += name[i];
}
return c;
}
int main() {
string name;
string type="default";
cin >> name;
for (int i = 0; i < name.length(); i++) {
if (name[i] == '_') {
// type이 java일 때 '_'가 등장하면 에러 (대문자, 언더바 섞였다는 뜻)
//맨 처음에 _로 시작하면 에러, 시작은 소문자여야함.
//맨 마지막에 _로 끝나도 에러, ex. c_는java로 변환불가
//_가 두 번 연속 나와도 에러, 인덱스가 -1이면 문제가 생기므로 i!=0이라는 조건을 줌
if (type == "java" || i==0 || i==name.length()-1 || i != 0 && name[i - 1] == '_') {
type = "error";
break;
}
type = "c++";
}
if (name[i] >= 'A' && name[i] <= 'Z') {
if (type == "c++" || i == 0) {
type = "error";
break;
}
type = "java";
}
}
if (type == "c++")
cout << ctoj(name) << '\n';
else if (type == "java")
cout << jtoc(name) << '\n';
else if (type == "default")
cout << name << '\n';
else
cout << "Error!" << '\n';
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[C++] 백준 알고리즘 12018 Yonsei TOTO (0) | 2021.09.20 |
---|---|
[C++] 백준 알고리즘 11268번 절댓값 힙 (0) | 2021.09.20 |
[C++] 백준 알고리즘 11723번 집합 (0) | 2021.09.16 |
[C++] 백준 알고리즘 1935번 후위 표기식2 (0) | 2021.09.16 |
[C++] 백준 알고리즘 20920번 영단어 암기는 괴로워 (0) | 2021.09.15 |