string 타입을 사용하여 getline 함수를 통해 공백을 포함한 문장을 받았다
그런데 틀렸습니다 라는 답을 받게되었다!
실행은 예제와 같게 잘 되는데 왜일까..!!
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
int count = 0;
for (int i = 0; i < sentence.size(); i++) {
if (sentence[i] == ' ' && i != sentence.size() - 1) {
if (i != 0)
count++;
}
if (i == sentence.size() - 1)
count++;
}
cout << count;
}
그래서 char타입으로 문장을 받아보기로 했다. cin.getline을 사용하여 최대 1000000길이의 문자를 받았다. 그런데도 틀렸다는 결과가 나왔다. 마찬가지로 실행은 모두 정상적으로 되었다.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sentence[1000000];
cin.getline(sentence, 1000000);
int count = 0;
for (int i = 0; i < strlen(sentence); i++) {
if (sentence[i] == ' ' && i != strlen(sentence) - 1) {
if (i != 0)
count++;
}
if (i == strlen(sentence) - 1)
count++;
}
cout << count;
}
그래서 예외처리를 해주는 부분에 문제가 있구나 하고 깨달았다.
기존에는 문자열의 제일 첫번째 부분은 무조건 제외를 하고 count 를 진행하였고, 문자열의 가장 마지막 부분이 나오면 무조건 한 단어가 끝났다고 판단하여 count +1 를 해주었다.
우선, 문장이 빈상태로 입력되면 0을 리턴하도록 하는 것을 추가하였고 문자열 자리수가 0일때부터 끝까지 공백을 고려하여 1부터 count를 해준다. 여기서 만약 가장 처음 혹은 끝이 공백이라면 count 를 -1해주는 방식이다.
앞방식과의 차이점과 발견하지 못한 오류를 곰곰히 생각해보았는데...
발견하지 못하였다. 어느부분에서 백준이 오답이라고 판단한지 모르겠다 ㅜㅜ
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
if (sentence.empty()) {
cout << "0";
return 0;
}
int count = 1;
for (int i = 0; i < sentence.length(); i++) {
if (sentence[i] == ' ')
count++;
}
if (sentence[0] == ' ')
count--;
if (sentence[sentence.length() - 1] == ' ')
count--;
cout << count;
}
#include <iostream>
#include <string>
using namespace std;
int main() {
string word;
cin >> word;
int count[100] = { 0, };
for (int i = 0; i < word.length(); i++) {
if (word[i] >= 97 && word[i] <= 122) {
word[i] -= 32;
}
count[word[i]]++;
}
int max = 0;
char result = '?';
for (int j = 65; j <= 90; j++) {
if (max < count[j]) {
max = count[j];
result = j;
}
else if (max == count[j])
result = '?';
}
cout << result;
}
아스키 코드를 활용하여 소문자를 대문자로 변환한 후 각 문자의 아스키코드 인덱스에 따른 갯수를 저장하는 배열을 count[100] 에 저장하였다.
그 후 각 인덱스를 비교하여 max값을 포함한 인덱스를 찾아내고, 그 인덱스가 아스키코드를 의미하므로 그 인덱스를 출력하도록 한다.
max 와 해당 인덱스 갯수가 같다면 ?로 변수를 저장한다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int size;
cin >> size;
double score[1000];
int max = 0;
for (int i = 0; i < size; i++) {
cin >> score[i];
if (score[i] > max)
max = score[i];
}
double sum = 0;
for (int i = 0; i < size; i++) {
score[i] = score[i] / max * 100;
sum += score[i];
}
cout << fixed;
cout.precision(2);
cout << sum / (double)size;
}
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int r;
r = a * b * c;
string result = to_string(r);
vector<string> vec(result.size());
for (int i = 0; i < vec.size(); i++) {
vec[i] = result[i];
}
int size = 0, count;
while (size < 10) {
count = 0;
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == to_string(size))
count++;
}
cout << count << endl;
size++;
}
}
to_string
int를 string으로 바꿔주는 함수
#include <iostream>
#include <vector>
using namespace std;
int main() {
int num;
cin >> num;
vector<int> vec(num);
int min = 1000000, max = -1000000;
for (int i = 0; i < num; i++) {
cin >> vec[i];
if (vec[i] < min)
min = vec[i];
if (vec[i] > max)
max = vec[i];
}
cout << min << " " << max;
}