본문 바로가기
코딩테스트/백준

[백준] 단계별로 풀어보기 > 문자열 (c++)

by Hwan,. 2022. 1. 15.
728x90
반응형

문제 1. 아스키 코드

#include <iostream>

using namespace std;

int main() {
    cin.tie(NULL);
    cin.sync_with_stdio(false);

    char a;
    cin >> a;
    cout << int(a) << endl;

    return 0;
}

 

문제 2. 숫자의 합

#include <iostream>
#include <string>

using namespace std;

int main() {
    cin.tie(NULL);
    cin.sync_with_stdio(false);

    int a, sum=0;
    string b;
    cin >> a >> b;

    for (int i = 0; i < a; i++) {
        sum += int(b[i]) - int('0');
    }

    cout << sum << endl;

    return 0;
}

 

문제 3. 알파벳 찾기

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    int alphabets[26], index;
    int arr_size = sizeof(alphabets) / sizeof(int);

    for (int i = 0; i < arr_size; i++) {
        alphabets[i] = -1;
    }

    cin >> s;
    for (int i=0; i < s.size(); i++) {
        index = int(s[i]) - int('a');
        if (alphabets[index] == -1) {
            alphabets[index] += (i + 1);
        }
    }

    for (int i = 0; i < arr_size; i++) {
        cout << alphabets[i];
        if (i != arr_size - 1) cout << " ";
    }

    return 0;
}

 

문제 4. 문자열 반복

#include <iostream>

using namespace std;

int main(){
    int a, b;
	string str;

	cin >> a;

	for (int i = 0; i < a; i++) {
		cin >> b >> str;
		for (int i = 0; i < str.length(); i++) {
			for (int j = 0; j < b; j++) {
				cout << str[i];
			}
		}
		cout << endl;
	}
    
    return 0;
}

 

문제 5. 단어 공부

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map> 
#include <utility>

using namespace std;

int main() {
	string str;
	map<char, int> myMap;
	map<char, int>::iterator iter;

	int int_max = 0;

	char ch_result;
	int int_cnt = 0;

	for (char c = 'a'; c <= 'z'; c++) {
		myMap[c] == 0;
	}

	cin >> str;
	for (int i = 0; i < str.length(); i++) {
		str[i] = tolower(str[i]);
		myMap[str[i]]++;
	}

	for (iter = myMap.begin(); iter != myMap.end(); iter++) {
		if (iter->second > int_max) {
			int_max = iter->second;
		}
	}

	for (iter = myMap.begin(); iter != myMap.end(); iter++) {
		if (int_max == iter->second) {
			int_cnt++;
			ch_result = iter->first;
		}
	}

	if (int_cnt == 1) {
		printf("%c\n", toupper(ch_result));
	}
	else {
		cout << '?' << endl;
	}

	return 0;
}

 

문제 6. 단어의 개수

#include <iostream>
#include <vector>
#include <string>
#include <sstream> 

using namespace std;

vector<string> func_1152_split(string str, char ch) {
	stringstream ss(str);
	string tmp;
	vector<string> res;

	while (getline(ss, tmp, ch)) {
		res.push_back(tmp);
	}

	return res;
}

int main() {
	string str;
	vector<string> res;
	int cnt = 0;

	getline(cin, str, '\n');
	res = func_1152_split(str, ' ');

	for (int i = 0; i < res.size(); i++) {
		if (res[i].size() > 0) cnt++;
	}

	cout << cnt << endl;
    return 0;
}

 

문제 7. 상수

#include<iostream>
#include<string>

using namespace std;

int main(){
	string a, b;
	string a_r, b_r;
	int res;
	int cnt=0;

	cin >> a >> b;

	a_r = a;
	b_r = b;

	for (int i = 2; i >= 0; i--) {
		a_r[cnt] = a[i];
		b_r[cnt++] = b[i];
	}
	
	if (stoi(a_r) > stoi(b_r)) {
		res = stoi(a_r);
	}
	else {
		res = stoi(b_r);
	}

	cout << res ;
    
    return 0;
}

 

문제 8. 다이얼

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(){
    string str;
	cin >> str;
	map<char, int> m;
	int point, sum=0;

	for (int i = 0; i < 26; i++) {	
		if ('A' + i < 'Z') point = 10;
		if ('A' + i < 'W') point = 9;
		if ('A' + i < 'T') point = 8;
		if ('A' + i < 'P') point = 7;
		if ('A' + i < 'M') point = 6;
		if ('A' + i < 'J') point = 5;
		if ('A' + i < 'G') point = 4;
		if ('A' + i < 'D') point = 3;

		m['A' + i] = point;
	}

	for (int i = 0; i < str.length(); i++) {
		sum += m[str[i]];
	}

	cout << sum << endl;
    
    return 0;
}

 

문제 9. 크로아티아 알파벳

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
 	vector<string> v_str = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };
	string str;

	cin >> str;
	for (int i = 0; i < v_str.size(); i++) {
		while (1) {
			if (str.find(v_str[i]) == string::npos) {
				break;
			}
			else {
				str.replace(str.find(v_str[i]), v_str[i].length(), "!");
			}
		}
	}

	cout << str.length() << endl;
    return 0;
}

 

문제 10. 그룹 단어 체커

#include <iostream>
#include <string>
#include <map> 

using namespace std;

int main() {
    	int a;
	cin >> a;

	string* arr_str = new string[a];
	map<char, int> m;
	int cnt = 0;

	for (int i = 0; i < a; i++) {
		cin >> arr_str[i];
	}

	char pre_ch;
	bool is_flag;

	for (int i = 0; i < a; i++) {
		pre_ch = '0';
		is_flag = true;
		for (char ch = 'a'; ch <= 'z'; ch++) {
			m[ch] = 0;
		}

		for (int j = 0; j < arr_str[i].length(); j++) {
			if (m[arr_str[i][j]] != 0) {
				if (pre_ch != arr_str[i][j]) {
					is_flag = false;
					break;
				}
			}

			m[arr_str[i][j]]++;
			pre_ch = arr_str[i][j];
		}

		if (is_flag) {
			cnt++;
		}
	}
	
	cout << cnt;
	return 0;
}

 

결과

728x90
반응형

댓글