해석이 이상할 수 있습니다.
이상한 부분은 말씀해 주시면 수정하겠습니다.
문제:https://codeforces.com/problemset/problem/118/A
시간 제한: 2s
메모리 제한: 256MB
Petya는 프로그래밍 수업에 참석하기 시작했다. 첫번째 수업에서 그는 글을 작성하는 쉬운 프로그램을 작업했다. 그 프로그램은 작업을 해야한다 다음과 같은. : 문자열을 주어진다, 만약 대문자 그리고 소문자 영어로 구성된. 그것은:
모든 모음(vowels)을 지운다.
문자 "."을 삽입한다. 각 자음 이전에
대체한다 모든 대문자 자음을 동일한 하나의 소문자로
모음은 "A", "O", "Y", "E", "U", "I", 그리고 나머지(the rest)는 자음이다. 이 프로그램은 반드시 하나의 문자열이 입력되고, 그것은 반환한다 하나의 문자열로, 프로그램이 처리한 후 처음 문자열을.
Petya를 도와달라 쉬운일에 대처(cope with) 하도록.
[입력]
첫 줄에 Petya의 프로그램의 삽입된 문자열이 나온다. 이 문자열은 오로지 대문자,소문자 라틴어로 구성돼있고 길이는 1 과 100 사이이다.
inclusive(포함한)
[출력]
결과 문자열이 출력된다. 그것은 보장한다 문자열을 빈 공간 없는.
문자열에서 모음에 해당하는 문자들을 공백으로 변경.
그 후 erase와 remove함수를 사용하여 공백 문자를 모두 지운다.
위 과정이 처리된 word 문자열을 반복문을 통해 .과 word에 문자들을 번갈아 출력했다.
제출했을 때 나온 오류
program.cpp(7): warning C4018: '<': signed/unsigned mismatch
아래 소스를 보면 7번 째 줄에 에러가 있다
이 에러는 int i -> unsigned i 로 바꾸고 해결했다.
아마 사이트에서 혹시나 다른 값이 비교될 것을 염려해 뜬 것으로 보인다.
program.cpp(23): error C2660: 'remove': function does not take 3 arguments
#include algorithm 추가하고 해결
program.cpp(27): warning C4018: '<': signed/unsigned mismatch
처음 오류와 동일
그리고 28번째 테스트 케이스에서 시간초과가 났는데
마지막 출력하는 부분에 반복문에서 sum을 아예 지우고 바로바로 출력하게했다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string word;
cin >> word;
for (int i = 0; i < word.length(); i++) {
if (word[i] == 'A' || word[i] == 'a' ||
word[i] == 'O' || word[i] == 'o' ||
word[i] == 'Y' || word[i] == 'y' ||
word[i] == 'E' || word[i] == 'e' ||
word[i] == 'U' || word[i] == 'u' ||
word[i] == 'I' || word[i] == 'i'
) {
word[i] = ' ';
}
else if ((int)word[i] > 64 && (int)word[i] < 91) {
int temp = (int)word[i];
temp += 32;
word[i] = (char)temp;
}
}
word.erase(remove(word.begin(), word.end(), ' '), word.end());
char sum[101];
for (int i = 0; i < word.length() * 2; i++) {
if (i % 2 == 0)sum[i] = '.';
else {
sum[i] = word[(i-1)/2];
}
cout << sum[i];
}
}
아래 정답 코드가 있다.
[코드]
https://github.com/Woobeen906/Codeforces/blob/main/118-A.cpp