2022. 2. 9. 01:03ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/10820
접근 방법 - 아스키코드 연산이 필요한 문제
백준의 10820번 문제는 아스키코드의 연산을 기본으로 한 문제이다.
해당 문제는, 입력받은 문자열에 따라 소문자, 대문자, 숫자, 공백의 개수를 순차적으로 출력해야 하는 문제이다.
결국 빈도수 측정 문제이다. 이와 관련한 다른 문제에 대해, 이전에 작성한 글의 링크를 아래에 기재해놓으니 참고해보길 바란다.
https://smary-it.tistory.com/74
필자는 빈도수를 구하기 위해 위 링크의 문제처럼 별도의 배열을 사용하였다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 문자열 입력이 끝날 때까지 반복문을 무한 실행한다.
(즉, 문자열 입력이 들어오는 대로 해당 반복문을 실행한다.)
(여기서, getline(cin, ch) 구문은 공백을 포함한 문자열을 입력받는다는 것을 의미한다.)
2) 정답을 저장할 배열(cnt)을 모두 0으로 초기화한 채 선언한다.
(이때, 배열의 크기는 4로 설정한다.)
3) 입력받은 문자열의 길이만큼 반복문을 실행하여, 해당 연산을 취한다.
- 탐색한 문자가 소문자일 때, cnt[0]에 1을 더한다.
- 탐색한 문자가 대문자일 때, cnt[1]에 1을 더한다.
- 탐색한 문자가 공백일 때, cnt[3]에 1을 더한다.
- 탐색한 문자가 숫자일 때, cnt[2]에 1을 더한다.
4) 3)의 연산이 모두 끝났다면, 최종적으로 저장된 cnt 값들을 순차적으로 출력한다.
5) 입력되는 문자열이 없을 시, 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
using namespace std;
//백준 10820번 코드
int main() {
string ch;
while (getline(cin, ch)) {
int cnt[4] = { 0 };
for (int i = 0; i < ch.length(); i++) {
if (ch[i] >= 'a' && ch[i] <= 'z') {
cnt[0]++;
}
else if (ch[i] >= 'A' && ch[i] <= 'Z') {
cnt[1]++;
}
else if (ch[i] == ' ') {
cnt[3]++;
}
else {
cnt[2]++;
}
}
for (int i = 0; i < 4; i++) {
cout << cnt[i] << " ";
}
cout << endl;
}
}
제출 결과
(2022.01.04 백준 10820번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 10845번 큐 (C++/cpp) (0) | 2022.02.09 |
---|---|
[백준 BOJ] 10828번 스택 (C++/cpp) (0) | 2022.02.09 |
[백준 BOJ] 10818번 최소, 최대 (C언어) (0) | 2022.02.06 |
[백준 BOJ] 10809번 알파벳 찾기 (C언어) (0) | 2022.02.06 |
[백준 BOJ] 10808번 알파벳 개수 (C언어) (0) | 2022.02.05 |