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 |