
리뷰

브론즈2 문제 치고는 난이도가 꽤 있었던 것 같다. 아뭍느 transform을 처음으로 활용해 본 문제
문제 풀이
- 각 케이스마다 문자열 s를 getline으로 받아오고 transform을 통해 전체 문장을 소문자로 변경해 주었다.
- 아스키코드를 저장할 정수형 벡터를 초기화 해주고 각 문자에 대한 아스키코드의 인덱스를 1로 만들어 주었다.
- a-z까지 들어있는지 체크를 위한 정수 변수 cnt를 0으로 초기화, 들어있지 않은 문자를 출력할 missing 변수를 초기화
- 소문자 a-z까지 아스키 코드를 돌며 해당 값이 1이면 cnt를 증가 0일 경우 해당 아스키코드의 문자를 추가해줬다.
- cnt가 총 26이면 pangram 출력, 아닐 경우 missing과 등장하지 않은 문자들을 출력해 주었다.
참고 사항
cnt가 1이 아닌 케이스를 만나도 break하지 말고 끝까지 for문을 돌아야 한다.
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
cin.ignore();
while (n--) {
string s;
getline(cin, s);
transform(s.begin(), s.end(), s.begin(), [](char c) {return tolower(c); });
vector<int> lst(127, 0);
int length = s.size();
while (length--) {
lst[s[length]] = 1;
}
int cnt = 0;
string missing = "";
for (int i = 97; i < 123; i++) {
if (lst[i]) cnt++;
else missing += (char)i;
}
if (cnt == 26) cout << "pangram\n";
else cout << "missing " << missing << "\n";
}
}
728x90
'알고리즘 공부 > C++' 카테고리의 다른 글
백준 1159번 농구 경기 C++ (0) | 2024.07.21 |
---|---|
백준 1076번 저항 C++ (0) | 2024.07.21 |
백준 11023번 더하기 3 C++ (0) | 2024.07.21 |
백준 10822번 더하기 C++ (0) | 2024.07.21 |
백준 10801번 카드게임 C++ (0) | 2024.07.21 |