티스토리 뷰
안녕하십니까 감자코딩에 감자개발자입니다. 이번에 살펴볼 문제는 백준알고리즘의 10808번문제인 알파벳 개수 문제입니다.
문제 링크
https://www.acmicpc.net/problem/10808
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.
예제 입력 1
baekjoon
예제 출력 1
1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0
문제 해결 방법
1) 가장먼저 아스키코드에 대한 이해가 되어있어야합니다.
알파벳 대문자 'A' ~ 'Z' 까지는 아스키 코드로 65 ~ 90까지로 , 소문자는 'a' ~ 'z', 97 ~ 122 까지로 정의되어 있습니다. 이것을 다 외워야할까요? 괜찮습니다. 이것들을 몰라도 충분히 문제를 풀 수 있습니다. 대충 이런식이다 라는 이해가 필요합니다.
2) 단어는 100자가 넘지 않게 입력을 받습니다.
3) 문제를 살펴보면 a~z까지의 모든 숫자들이 내가 입력한 단어와 비교하여 몇개씩 출현하였지를 확인하여야 하는문제입니다. 생각보다 쉽지만, 처음에 잘못생각할 수 있습니다.
그러면 결국에 a-z까지의 알파벳이 순서대로 비교를 하면되겠지요?
간단히 말해서 a를 기준으로 내가입력한 문자열에서 몇개 출현하였는지를 확인하고 바로 출력해줍니다. 이런방식으로 a~z까지를 순회하면 a-z까지의 알파벳 출현 개수가 모두 출력되겠지요?
4) 저는 이것들을 사용하기위해서 for문을 'a' ~ 'z'까지 반복문을 사용하였습니다. 아까말했던 아스키코드표에 대한 숫자? 이것이 필요할까요? 이렇게 되면 아스키코드 표를 몰라도 무조건 풀수 있습니다.
5) C언어 라이브러리인 #include <algorithm>을 추가해주시고, 저는 여기서 count라는 아주 좋은 함수를 사용해보겠습니다. 이것들은 값들을 비교해서 개수를 반환해주기때문이죠.
그래서 제가 입력한 문자열을 str.begin() , str.end() 파라미터를 두고 진행하였습니다. 제가 입력한 문자열 str을 처음부터 끝까지를 기준으로 i('a'~ 'z')까지 비교하겠다는 말입니다.
자세한 사항은 코드로 살펴보겠습니다.
코드 리뷰
//
// 10808(알파벳개수).cpp
// Algorigm_Study
//
// Created by kgh on 18/12/2018.
// Copyright © 2018 kgh. All rights reserved.
//
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(void){
// 문자열 입력
string str;
cin >> str;
// 시간복잡도 : O(N)
for(int i='a'; i<='z'; i++){
// str문자열 처음부터 끝까지 'a'값부터 'z'값까지의 개수를 세서 반환한다.
// Example: hello 일경우 'a'부터 값을 hello전체를 탐색해서 개수를 반환한다. 그이후 'b' ~ 'z'까지 탐색
cout << count(str.begin(), str.end(), i) << ' ' ;
}
printf("\n");
return 0;
}
어떠신가요? 생각보다 코드줄수도 짧고 조금만 생각했다면 충분히 빠르게 풀수 있던 문제였습니다.
이상 감자코딩에 감자개발자였습니다. 감사합니다 :)
'Algorithm' 카테고리의 다른 글
[알고리즘] 백준알고리즘 10820 문자열 분석 (0) | 2018.12.20 |
---|---|
[알고리즘] 백준알고리즘 10809 알파벳찾기 (0) | 2018.12.19 |
[알고리즘] 백준알고리즘 10866 Deque 문제 (0) | 2018.12.18 |
[알고리즘] 백준알고리즘 1158 조세퍼스 문제 (0) | 2018.12.16 |
[알고리즘] 백준 알고리즘 1406 에디터 (0) | 2018.12.16 |
- Total
- Today
- Yesterday
- C언어
- TensorFlow
- 초보자를 위한 C언어 300제
- 텐서플로우
- Android
- BFS
- 감자코딩
- 알고리즘
- 안드로이드
- Algorigm
- 백준알고리즘
- MVC
- programming
- C langauge
- 백준
- 머신러닝
- 리버싱
- Spring
- 프로그래밍
- 복습
- 스프링
- node
- db
- 코드엔진
- 감자개발자
- node.js
- Controller
- 노드
- 학교
- 개발하는 관광이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |