출처: https://www.acmicpc.net/problem/3613
문제
Java 예찬론자 김동규와 C++ 옹호가 김동혁은 서로 어떤 프로그래밍 언어가 최고인지 몇 시간동안 토론을 하곤 했다. 동규는 Java가 명확하고 에러가 적은 프로그램을 만든다고 주장했고, 동혁이는 Java는 프로그램이 느리고, 긴 소스 코드를 갖는 점과 제네릭 배열의 인스턴스화의 무능력을 비웃었다.
또, 김동규와 김동혁은 변수 이름을 짓는 방식도 서로 달랐다. Java에서는 변수의 이름이 여러 단어로 이루어져있을 때, 다음과 같은 방법으로 변수명을 짓는다.
첫 단어는 소문자로 쓰고, 다음 단어부터는 첫 문자만 대문자로 쓴다. 또, 모든 단어는 붙여쓴다. 따라서 Java의 변수명은 javaIdentifier
, longAndMnemonicIdentifier
, name
, bAEKJOON
과 같은 형태이다.
반면에 C++에서는 변수명에 소문자만 사용한다. 단어와 단어를 구분하기 위해서 밑줄('_
')을 이용한다. C++ 변수명은 c_identifier
, long_and_mnemonic_identifier
, name
, b_a_e_k_j_o_o_n
과 같은 형태이다.
이 둘의 싸움을 부질없다고 느낀 재원이는 C++형식의 변수명을 Java형식의 변수명으로, 또는 그 반대로 바꿔주는 프로그램을 만드려고 한다. 각 언어의 변수명 형식의 위의 설명을 따라야 한다.
재원이의 프로그램은 가장 먼저 변수명을 입력으로 받은 뒤, 이 변수명이 어떤 언어 형식인지를 알아내야 한다. 그 다음, C++형식이라면 Java형식으로, Java형식이라면 C++형식으로 바꾸면 된다. 만약 C++형식과 Java형식 둘 다 아니라면, 에러를 발생시킨다. 변수명을 변환할 때, 단어의 순서는 유지되어야 한다.
재원이는 프로그램을 만드려고 했으나, 너무 귀찮은 나머지 이를 문제를 읽는 사람의 몫으로 맡겨놨다.
재원이가 만드려고 한 프로그램을 대신 만들어보자.
문제 풀이:
-char형 배열을 두개 만들어 하나는 입력을 받고 다른 하나는 입력받은 배열을 변환시켜서 저장
-첫번째 문자에는 대문자, - 일경우 error
- Java 에서는 A를 _a로 변경
- c++에서는 _a 를 A로 변경
- '_'가 연속으로 나오면 error
- 대문자와 _가 들어가있으면 error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include<iostream> #include<string.h> #include<queue> using namespace std; int main() { char value[101]; char result[202] = {"\n"}; bool Cpp = false; bool Java = false; bool Error = false; int k = 0; cin >> value; for (int i = 0; i < strlen(value); i++) { if (65 <= value[i]&&value[i] <= 90) { if (Cpp||i==0) { Error = true; break; } result[k] = '_'; k++; result[k] = value[i]+32; k++; Java = true; } else if(value[i]==95) { if (Java||i==0|| i == strlen(value) - 1 || value[i + 1] == '_' || (65 <= value[i + 1] && value[i + 1] <= 90)) { Error = true; break; } i++; result[k] = value[i]-32; k++; Cpp = true; } else { result[k]=value[i]; k++; } } if (Error) { cout << "Error!" << endl; } else { cout << result << endl; } } | cs |
'알고리즘' 카테고리의 다른 글
2017_11_29<백준> 2178번 미로 탐색 (0) | 2017.11.29 |
---|---|
2017_11_28<백준>1991번 트리 순회 (1) | 2017.11.28 |
2017_11_25 <백준> 1260번 DFS와 BFS (0) | 2017.11.25 |
2017_11_24<백준>2504번 괄호의 값 (c++) (0) | 2017.11.24 |
2017_11_23 <백준> 1978번 소수 찾기 (0) | 2017.11.23 |