본문 바로가기

C++/CodingTest

[백준 10808] 알파벳 개수.c

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

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

 

 

주어진 문자열에 대해 알파벳 개수를 구하는 문제.

문자열을 (최대길이 + 1)만큼 선언.

개수를 저장할 정수 배열을 선언.

 

먼저, for 문을 이용해서 각각 알파벳 개수를 더 했다.

문자도 컴퓨터의 입장에선 숫자로 취급한다고 한다.

'a', 'A', '%' 등 각각의 문자에 해당하는 고유 번호가 있다고 생각하면 될 듯하다.

여기서 'a'는 97, 'b'는 98...

순차적으로 값을 가진다.

 

그러므로, 각 문자에 97을 뺀다는 것은,

'a' - 97 = 0

'b' - 97 = 1

...

'z' - 97 = 25

를 의미한다.

(여담이지만, 97 대신 'a'을 입력해도 된다. 'a'를 97로 인식하기 때문.)

 

또한, for( 1; 2; 3) 에서 

1 은 시작할 때 한번 실행되는 "초기화식"

2 는 매 반복 후, 확인하는 "조건식"

3 은 매 반복 후, 바꾸어주는 "증감식"

 

그래서 for를 실행시키면,

1이 먼저 실행되고,

2를 확인하여 참이라면,

{ } 안의 명령을 수행한 후,

3을 실행한다.

다시 2의 조건을 확인하여,

{ } 과 3을 실행하거나 루프를 종료한다.

 

문자열의 마지막 값은 '\0', Null값으로 이루어져있다.

이를 T/F로 치환한다고 하면, False로 보는 듯하다.

(마찬가지로 0도 False로 인식한다.)

 

따라서, 첫 번째 for문은

"문자열의 마지막인 Null이 나올 때까지 반복해라"

라는 의미를 가지게 된다.

 

이 외에는 특별할 것 없는 문제.

(C의 문자열이 얼마나 극악한 녀석인지 이때까진 크게 체감하지 못 했다...)

'C++ > CodingTest' 카테고리의 다른 글

[백준 1094 - 실버5] 막대기.cpp  (0) 2022.04.23
[백준 10828] 스택.c  (0) 2022.04.23
[백준 10952] A + B - 5.c  (0) 2022.04.22
[백준 8393] 합.c  (0) 2022.04.22
[백준 1330] 두 수 비교하기.c  (0) 2022.04.22