백준 10808 알파벳 갯수

CJB_ny·2022년 12월 29일
0

백준

목록 보기
22/104
post-thumbnail

문제

알파벳 갯수

이 문제는 너무 쉬움.

쉽다고 뭐 공부 안할게 없다는 것은 아님.

나는 쉽다고 했지만 암시적 형변환 개념을 생각을 못하고 풀었음. (이건 푼게 아니다...)

풀었지만 왜 이렇게 풀었는지와 왜 이러한 방식을 썻고 다른방식이 있는지 생각을 해볼 필요가 있는듯?

나는 아스키 코드와 배열을 통해서 품.

#include <iostream>
using namespace std;

int arr[26];

int main()
{
	string S;

	cin >> S;

	for (int i = 0; i < S.size(); ++i) arr[S[i] - 97]++;

	for (int i : arr) cout << i << " ";

	return 0;
}

Count문제

카운트 문제를 풀 때는

std::map또는 array를 사용하도록 한다.

그러면 언제 map을 쓰고 arr을 사용을 하나?

stringdl 몇개냐? 할 경우 map이 조금 더 좋고

integer일 경우 arr이 조금 더 좋다.

근데 이문제는 "문자"를 카운팅 하는 문제임.

암시적 형변환 👍👍👍

arr이라는 배열에 아스키 테이블 바인딩 되어있다고 가정을 하고 아래 코드를 보면은

char a = 'a';
arr[a]

// 출력결과 
// arr[a] => 'a'

이게 가능한 이유는 암시적 형변환 때문이다.

강의에서는 그냥 "유연"하게 된다는데 이런거 다 알아야지 공부할려면 ㅇㅋ?

유연하게 되는게 아니라 암시적 형변환으로 가능한 것이다.

코드 수정

나는 아래처럼 97을 빼버렸는데 "암시적 형변환" 개념을 생각을 못했다..

그냥 이렇게 되지 않던가...? 정도로 넘어갔음..

#include <iostream>
using namespace std;

int arr[26];

int main()
{
	string S;

	cin >> S;

	for (int i = 0; i < S.size(); ++i) arr[S[i] - 97]++;

	for (int i : arr) cout << i << " ";

	return 0;
}

이렇게 ㅈ밥티가 나는 식으로 상수를 빼버림 위에처럼 이런 코드가 아니라 아래처럼

밑줄친 부분에서 "암시적 형변환"이 일어나기 때문에 바로 접근이 가능하다.

대문자 A : 65, a : 97 정도는 외워 두자.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글