나 개발자 진짜 되냐?

바킹독 0x03 문제1 - 알파벳 개수 / 백준 10808번 본문

C++을 시작해봐요!/알고리즘을 공부해봐요!

바킹독 0x03 문제1 - 알파벳 개수 / 백준 10808번

Snow Rabbit 2025. 9. 16. 18:21

 

드! 디! 어! 4월부터... 풀던 0x02를 마치고 03으로 왔다.

몇개월 만이지..

ㅋㅋㅋㅋㅋ너무 게을렀나? 싶기도하고

바빴다는 핑계를 좀 대며..

 

그의 이름은 배열....

참 싫은 그대

 

풀어봅시다!


 

알파벳 소문자로만 이루어진 S 단어..

 

일단 내가 지금 당장 떠오르는 방법은..

 

S를 입력받아서 배열 한개한개에 넣어주고,

a부터 z까지 각자의 배열을 ..만들어주고

.. 그다음에 어떡하지?......

.........ㅋㅋㅋㅋㅋ

그다음에 a부터 z까지 카운트할 수 있는 배열을 또 만들어주고..

 

그래도 되려나? 모르겠다

일단 계획은 이렇다.

 

 

계획은 틀어졌다.

문법을 모르기 때문

 

ㅋㅋㅋㅋㅋㅋㅋ

문자열...인데 문자열을 어떻게 받는 거지?

문자열로 하면 안 되는 건가? 벌써 마음이 꺾인다.

 

뭘 쓰고 있는 걸까..

 

포기하고 답을 봤다.

 

오.. 일단 스트링은 맞았다.

ㅋㅋㅋㅋㅋㅋㅋㅋ.. 시무룩

 

그리고 신기한 문법을 봤다

for (auto c: s)

 문자열 s안의 글자를 하나씩 꺼내어 c에 담아 반복한다.

이다.

s가 4 글자면 총 4번 반복하게 된다.

오... 이거 좋은데?

 

만약에 for문을 길게 쓰게 되면 어떻게 쓸 수 있을까.

for (int i = 0; i < s.size(); i++)
{
    char c = s[i];
    freq[c - 'a']++;
}

 

size나 length 쓸 때

괄호 꼭 써줘야 한다! 라이브러리여서 그렇다고 한다.

 

문자열의 경우 문자배열이라고 한다.

그래서 저렇게 문자열에 [i]를 써도 된다!

 

편한 문법이라고 한다.

반드시 써야 하는 문법은 아니라고 하니

자주 써먹을 수 있도록 숙지하자.

 

 

답은 이러했다.

fill을 배우면서 이번에 활용해보고 싶어서 적어보았다.

답이 틀리지 않은 거 보아.. 이것도 맞는 식이지 않을까? 생각이 들었다.


꼭 알아야 할 문법

 

 "a" /  'a' 는 다르다.

" " 는 문자열을 의미하며,

' ' 는 한 문자만 의미한다.

그래서 아스키코드 쓸 때도 "a"  하면 사고 난다.

char "a"  해도 안된다!

"" 자체가 문자열을 의미해서 아까 말했듯 문자열은 문자배열들이기 때문에

다르다.

하지만 'a' 는 하나의 문자이기 때문에

우리 컴퓨터는 이 문자가 숫자로 들어가져서

- 'a'  하는 것이 - 97 하는 것과 같다!

 

for ( auto c : s )

이 친구는 auto도 중요하긴 하다.

자주 쓰면 위험한 친구이기도 하고.

자료형을 알아서 지정해 주는 똑 부러지는 녀석이다.

 

그리고 c : s

는 s의 개수만큼 s값을 c로 옮겨주는 친구이다.

 

오..

그래서

for문으로 개수만큼 출력할 때

for ( int count : freq )

cout << count << ' ';

해줘도 freq가 26개고

그 안의 값을 count에 넣는 거라서

for ( int i = 0; i < 26 < i++)

cout << freq [i] << ' ' ;이랑 같게 된다.

 

휴.. 분명 쉬울 줄 알았는데 새앵각 보다 어려운 듯

편하다고 해서 익숙해지려고 했는데..

마지막 출력용 for문 쓸 땐 정석으로.... 써야 할지도?..

 

어렵다 어려워.

 

c - 'a'

아까도 적었지만 컴퓨터는 아스키코드로 외우기 때문에

c의 문자열 하나에다가 'a'를 빼게 되면

어떠한 값이 나오게 된다. 

그것이 인덱스를 표현하기 딲! 이라는것!

그 값을 freq [ 여기에 ] 넣어주게 되면 된다.


 

이게 뭐라고 머리가 터질거같은지..

정말 정말 어렵다.

답지 보고 이해하는데 한 시간이 넘게 썼다.

문제를 읽고... 답지를 본 시간은 5분이 채 안 됐는데 말이다..ㅎㅋ

 

내가 다음에 돌아와서 풀때

for ( auto c : s ) 에 대해 더 잘 쓸 수 있었으면 좋겠다.