본문 바로가기

백준

3613 Java vs C++

 

어렵지는 않은데 경우 따지는게 복잡했다. 파이썬이면 그냥 isalpha 이런거 써서 쉽게 할 수 있는데 씨쁠쁠은 모르겠다. 그래서 그냥 하나하나 다 확인했음. 

 

자바는 소문자랑 대문자만 있어야 하고 c++은 소문자랑 _만 있어야 하므로 이 외의 문자가 나올 경우 false로 둔다. 그리고 둘 다 false라면 그때는 error를 띄우게 코드를 짰다. 

 

 

그런데 틀렸다ㅠ 다시 보니 빠진 경우가 있다. 예를 들어 a__ 이런것도 내 코드에서는 맞았다고 뜨는데 여기서는 틀렸다고 둬야한다. 그래서 _가 입력으로 들어왔을 때 _가 연속으로 있지는 않은지, 그리고 끝에 붙어있지는 않은지 확인해줬다. 

 

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    
    bool isJava = true, isCpp = true;
    if (s[0] < 97 || 122 < s[0]){
        isJava = false; isCpp = false;
    }
    for(int i = 1; i < s.length(); i++){
        if(s[i] == '_'){
            if(s[i-1] == '_' || i == s.length()-1)
                isCpp = false;
            isJava = false;
        }
        else if (65 <= s[i] && s[i] <= 90){
            isCpp = false;
        }
        else if (s[i] < 97 || 122 < s[i]){
            isJava = false; isCpp = false;
        }
    }
    
    string r = "";
    if(!isJava && !isCpp){
        printf("Error!");
    }
    else if(isJava){
        for(int i = 0; i < s.length(); i++){
            if (65 <= s[i] && s[i] <= 90){
                r += "_"; r += s[i]+32;
            }
            else
                r += s[i];
        }
    }
    else if(isCpp){
        for(int i = 0; i < s.length(); i++){
            if(s[i] == '_'){
                r += s[i+1]-32;
                i++;
            }
            else
                r += s[i];
        }
    }
    cout << r;
    return 0;
}

맞았다!

코드가 정말 길다 (코드 길면 이상하게 좀 불안하더라)

'백준' 카테고리의 다른 글

2810 컵홀더  (0) 2019.11.02
15904 UCPC는 무엇의 약자일까?  (0) 2019.11.02
11383 뚊  (0) 2019.11.02
1049 기타줄  (0) 2019.11.01
10867 중복 빼고 정렬하기  (0) 2019.11.01