[백준 BOJ] 10820번 문자열 분석 (C++/cpp)

2022. 2. 9. 01:03PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/10820

 

10820번: 문자열 분석

문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있

www.acmicpc.net

백준 BOJ 10820번 문자열 분석 문제 사진

 

접근 방법 - 아스키코드 연산이 필요한 문제

백준의 10820번 문제는 아스키코드의 연산을 기본으로 한 문제이다.

해당 문제는, 입력받은 문자열에 따라 소문자, 대문자, 숫자, 공백의 개수를 순차적으로 출력해야 하는 문제이다.

결국 빈도수 측정 문제이다. 이와 관련한 다른 문제에 대해, 이전에 작성한 글의 링크를 아래에 기재해놓으니 참고해보길 바란다.

https://smary-it.tistory.com/74

 

[백준 BOJ] 10808번 알파벳 개수 (C언어)

문제 설명 https://www.acmicpc.net/problem/10808 10808번: 알파벳 개수 단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다. www.acmicpc.net 접근 방법 - 배열과 아스키코..

smary-it.tistory.com

필자는 빈도수를 구하기 위해 위 링크의 문제처럼 별도의 배열을 사용하였다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

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;
	}
}

 

제출 결과

백준 BOJ 10820번 문자열 분석 문제 C++ 제출 결과

(2022.01.04 백준 10820번 문제 제출 결과)

반응형