문제
https://www.acmicpc.net/problem/1283
풀이
일단 1) 단어 첫 글자가 단축키로 지정되었는지 확인
2) 모든 첫 글자가 단축키로 지정되어 있다면 한 글자 한 글자 확인
3) 그래도 다 지정되어 있다면 그냥 출력
이 과정을 코드로 구현했다.
단축키로 지정되어 있는지 확인하기 위해 set을 사용했다.(검색이 쉬워서)
c++로 문자열 문제 풀 때마다
공백 있는 문자열 입력받는 법, 공백 기준으로 나누는 법을 검색해서 풀고 있는데..
이번 기회에 확실히 정리했다.
공백 있는 문자열을 입력받을 때는 getline(cin, s)로 입력받으면 된다.
이때 주의할 점은 앞에서 입력받은 후에 버퍼에 남아있는 값을 지워줘야 한다는 것.
getline 전에 cin.ignore()를 해주면 된다.
공백 기준으로 문자열을 나눠서 벡터에 저장하려면 아래와 같다. sstream을 include 해야 한다.
stringstream ss(s);
vector<string> words;
string word;
while (getline(ss, word, ' ')) {
words.push_back(word);
}
그리고 정말 바보 같은 실수 때문에 좀 헤맸는데,,
대소문자 구분하지 않는다는 조건 때문에 추가한 chalpha 함수에서 부등호 쓸 때 =을 빼먹었다.. 그래서 a, z가 나오면 틀렸음
코드
#include <iostream>
#include <set>
#include <sstream>
#include <vector>
using namespace std;
char chalpha(char c) {
if (c >= 'a' && c <= 'z') return c - ('a' - 'A');
else return c + ('a' - 'A');
}
int main() {
set<char> set;
int N;
cin >> N;
cin.ignore();
for (int i = 0; i < N; i++) {
bool flag = false;
int i1, i2;
string s;
getline(cin, s);
stringstream ss(s);
vector<string> words;
string word;
// 스트림을 한 줄씩 읽어, 공백 단위로 분리한 뒤, 결과 배열에 저장
while (getline(ss, word, ' ')) {
words.push_back(word);
}
//일단 단어별로 앞글자 확인
for (int j = 0; j < words.size(); j++) {
if (set.find(words[j][0]) == set.end()) {
set.insert(words[j][0]);
set.insert(chalpha(words[j][0]));
i1 = j;
i2 = 0;
flag = true;
break;
}
}
//한글자한글자 확인
if (!flag) {
for (int j = 0; j < words.size(); j++) {
if (flag) break;
for (int k = 1; k < words[j].length(); k++) {
if (set.find(words[j][k]) == set.end()) {
set.insert(words[j][k]);
set.insert(chalpha(words[j][k]));
i1 = j;
i2 = k;
flag = true;
break;
}
}
}
}
if (!flag) {
for (int j = 0; j < words.size(); j++) {
cout << words[j] << " ";
}
cout << '\n';
} else {
for (int j = 0; j < words.size(); j++) {
if (i1 == j) {
for (int k = 0; k < words[j].length(); k++) {
if (k == i2) {
cout << "[" << words[j][k] << "]";
} else cout << words[j][k];
}
cout << " ";
} else cout << words[j] << " ";
}
cout << '\n';
}
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
프로그래머스 - 전력망을 둘로 나누기(C++) (0) | 2024.05.02 |
---|---|
백준 1327 - 소트 게임 (C++) (1) | 2024.03.31 |
백준 14226 - 이모티콘 (C++) (0) | 2024.03.22 |
백준 23300 - 웹 브라우저 2 (C++) (0) | 2024.03.21 |
백준 2470 - 두 용액 (C++) (0) | 2024.03.19 |