Algorithm/문제풀이
[C++] 백준 알고리즘 3613번 Java vs C++
사과당근
2021. 9. 16. 17:14
문제가 많이 긴데
결론은 문자열을 자바스타일에서 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';
}