[3613] Java vs C++

yyeahh·2021년 3월 26일
0

Baekjoon

목록 보기
15/19

3613

🔍 문제설명

재원이의 프로그램은 가장 먼저 변수명을 입력으로 받은 뒤, 이 변수명이 어떤 언어 형식인지를 알아내야 한다.
Java변수명은 C++로 C++변수명은 Java변수명으로 바꾼다.
만약 C++형식과 Java형식 둘 다 아니라면, 에러를 발생시킨다. 변수명을 변환할 때, 단어의 순서는 유지되어야 한다.

[Java변수명 짓는 법]

1. 첫 단어는 소문자로 쓰고, 다음 단어부터는 첫 문자만 대문자로 쓴다. 
2. 또, 모든 단어는 붙여쓴다.
javaIdentifier, longAndMnemonicIdentifier, name, bAEKJOON

[C++변수명 짓는 법]

1. 소문자만 사용한다. 
2. 단어와 단어를 구분하기 위해서 밑줄('_')을 이용한다.
c_identifier, long_and_mnemonic_identifier, name, b_a_e_k_j_o_o_n
입력
첫째 줄에 변수명이 주어진다. 
영어 알파벳과 밑줄('_')로만 이루어져 있고, 길이는 100을 넘지 않는다.
출력
입력으로 주어진 변수명이 Java형식이면, C++형식으로 출력하고, C++형식이라면 Java형식으로 출력한다. 
둘 다 아니라면 "Error!"를 출력한다.

✏️ 문제해결방법

...
구성 : 알파벳, '_'

[오류가 나는 경우]
  1. 대문자와 '_'의 혼합
    • java변수인데 c++인 경우
    • c++변수인데 java인 경우
  2. 첫 글자가 대문자나 '_'인 경우
  3. 마지막 글자가 '_'인 경우
  4. '_'가 연속인 경우

📃 코드

[2021.03.26] 실패
#include <iostream>
#include <string>

using namespace std;

int main() {
    int ind = 0;
    bool java = false, cpp = false, error = false;
    string name;
    char answer[205];

    cin >> name;

    for(int i=0; i < name.size(); i++) {
        if('A' <= name[i] && name[i] <= 'Z') { //Java
            if(!i || cpp) { //첫문자 대분자, c++
                error = true; break;
            }
            answer[ind++] = '_';
            answer[ind++] = name[i] - 'A' + 'a';
            java = true;
        }
        else if(name[i] == '_') {    //c++
            if(!i || java || i == name.size() - 1 || name[i + 1] == '_') {
                error = true; break;
            }
            answer[ind++] = name[++i] + 'A' - 'a';
            cpp = true;
        }
        else answer[ind++] = name[i];
    }
    cout << ((error) ? "Error!" : answer);
}
50%정도까지는 성공했는데 어떠한 예외가 더 있을까요....

0개의 댓글