#include <iostream>
using namespace std;
int main() {
int n, k, sum = 0;
cin >> n;
int* p = new int[n];
cin >> k;
for (int i = 0; i < n; i++) {
p[i] = k % 10;
k = k / 10;
}
for (int i = 0; i < n; i++) {
sum = sum + p[i];
}
cout << sum;
}
아스키 코드이용 안하고 한건데
적은 숫자는 되는데 큰 숫자로가면 오류가 난다. (질문 해야 함)
#include <iostream>
using namespace std;
int main() {
int n, sum = 0;
cin >> n;
string k;
cin >> k;
for (int i = 0; i < n; i++) {
sum = sum + (int)k[i]-48;
}
cout << sum;
}
string k = abcdef
k[0] = a
k[1] = b
k[2] = c
k[3] = d
k[4] = e
k[5] = f
문자열 성질을 이용
아스키 코드를 이용하여 정답!
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
int cnt = 0;
while(cnt!=100){
cnt++;
getline(cin, s);
cout << s<<'\n';
}
return 0;
}
공백을 포함하므로 <string>
의 getline()을 이용하여 입력을 받았고
cout << s<<'\n';
에서 \n를 빼먹어서 애먹다가 풀었다
#include <iostream>
#include <string>
using namespace std;
int main() {
string s[100];
for(int i=0;i<100;i++){
getline(cin, s[i]);
}
for (int i = 0; i < 100; i++) {
cout << s[i]<<'\n';
}
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
while (getline(cin, s)) {
cout << s << '\n';
}
return 0;
}
이거 왜 되는지 모르겠음
#include <iostream>
#include<string>
using namespace std;
int main() {
int cnt = 0;
string user;
getline(cin, user);
for (int i = 0; i < user.length(); i++) {
cnt++;
switch (user[i])
{
case 'c':if (user[i + 1] == '='|| user[i + 1] == '-') {
i++;
}
break;
case 'd':if (user[i + 1] == '-') {
i++;
}
if (user[i + 1] == 'z'&&user[i+2]=='=') {
i = i + 2;
}
break;
case 'l':if (user[i + 1] == 'j') {
i++;
}
break;
case 'n':if (user[i + 1] == 'j') {
i++;
}
break;
case 's':if (user[i + 1] == '=') {
i++;
}
break;
case 'z':if (user[i + 1] == '=') {
i++;
}
break;
default:
break;
}
}
cout << cnt;
return 0;
}
user[i+1]
user[i+2]
에서 배열의 범위를 벗어나므로 범위를 추가해주었다.#include <iostream>
using namespace std;
int main() {
int cnt = 0;
string user;
cin >> user;
for (int i = 0; i < user.length(); i++) {
cnt++;
switch (user[i])
{
case 'c':
case 's':
case 'z':
if (i + 1 < 100) {
if (user[i + 1] == '=' || user[i + 1] == '-') {
i++;
}
}
break;
case 'n':
case 'l':if (i + 1 < 100) {
if (user[i + 1] == 'j') {
i++;
}
}
break;
case 'd':if (i + 1 < 100) {
if (user[i + 1] == '-') {
i++;
}
}
if (i + 2 < 100) {
if (user[i + 1] == 'z' && user[i + 2] == '=') {
i = i + 2;
}
}
break;
}
}
cout << cnt;
return 0;
}
'틀렸습니다'가 나오는데 반례를 찾지 못하였다.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
string user;
cin >> user;
int idx;
vector<string> croatia = { "c=","c-","dz=","d-","lj","nj","s=","z=" };
for (int i = 0; i < croatia.size(); i++) {
while (true)
{
idx = user.find(croatia[i]);
if (idx == string::npos)break;
user.replace(idx, croatia[i].length(), "#");
}
}
cout << user.length();
return 0;
}
두번째 시도의 반례를 찾지 못하여 벡터와 <string>
의 내부함수인 find()
, replace()
를 사용하여 짧은 코드로 문제를 해결하였다. <string>
의 내장함수를 이용하지 않으면 많이 길어지는 코드를 내장함수를 이용하여 비교적 간단하게 해결하였다 find()
, replace()
함수를 사용할 줄 아는지 물어보는 문제였다.