매일 조금씩

백준 10808번: 알바벳 개수 본문

알고리즘

백준 10808번: 알바벳 개수

mezo 2020. 1. 18. 20:55
728x90
반응형

 

 

알파벳 아스키코드를 활용한 코딩이였다. 

 

 

 

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int s[26];	//main함수 안에 선언하면 오류남


int main(void) {
	ios_base::sync_with_stdio(0);
	cin.tie(0);


	string str;
	cin >> str;

	for (int i = 0; i < str.size(); i++) {
		s[str[i] - 'a']++; //A-Z : 65-90, a-z : 97-122 
		//a가 제일 작은수여서 a를 뺀수가 알파벳에 해당하는 배열인덱스됨
	}

	for (int i = 0; i < 26; i++) {
		cout << s[i] << " ";
	}

	return 0;
}

 

배열을 전역으로 선언한 이유..

전역변수는 자동 0으로 초기화 되지만 

지역변수는 안됨.

 

 

잡상식까지 알게된 문제임

 

C++에서는 int s[26] = {};

이렇게만 해도 알아서 초기화 되는데

C에서는 int s[26] = {0}; 이런식으로 하나라도 초기화 시켜놔야 나머지가 0으로 초기화됨 

 

##그냥 변수 만들면 첨어ㅔ 초기화시키는 습관 들여놓기 ..

 

 

배열 만들때 예를 들어 (알파벳 관련문제 제외) 26크기가 필요하면 그래도 30으로 여유 있게 선언 해놔야 함

--> 가끔씩 메모리 문제로 인덱스 초과해서 들어가는 경우가 있음!

 

 

 

 

 

 

**** C언어의 경우 꿀팁 ****

 

_getch 함수를 사용하면 시간, 메모리 훨씬 절약 가능.

 

C++에서의 

 

1. 입력한다
2. string타입 변수에 입력한걸 저장한다
3. for문 돌려서 알파벳 확인

 

을 

 

1. 입력한다
2. s[입력한알파벳-'a']++;

 

로 가능 하다.

 

_getch 함수가 입력받은걸 그대로 버퍼에 남기는 함수인데

따로 char 같은 변수 선언할 필요도 없어서

 

시간, 메모리가 부족할때 _getch 함수를 쓰거나 scanf("%c", &input); 이런식으로

char 변수 하나에만 입력받아서 돌리는 방법을 써야한다.

728x90
반응형

'알고리즘' 카테고리의 다른 글

백준 1919번: 애너그램 만들기  (0) 2020.01.19
백준 2857번: FBI  (0) 2020.01.18
백준 5622번: 다이얼  (0) 2020.01.18
백준 2953번: 나는 요리사다  (0) 2019.12.15
[C++] 백준 2823번: 유턴 싫어  (0) 2019.12.08