728x90
난이도 : 브론즈2
알고리즘을 시작한지 별로 안돼서 브론즈 2도 어렵다..
원리
1. char형태로 250자 배열을 받는다.
2. #이 입력될 때까지 값을 출력해야하므로 while문(무한반복) 이용
3. for문을 이용해서 char배열의 인덱스 값을 아스키코드 값과 비교하여 카운트한다.
4. 만약 반복 된 문자가 있을 수 있으므로 체크할 chk 변수를 선언하여 한 문자를 확인 할때마다 chk=1 해줌
5. 카운트 한걸 바로바로 sum에 더해줘서 sum을 출력하게함
답 :
#include <iostream>
#include <cstring>
int main() {
using namespace std;
char a[251];
while (1) {
int cnt = 0, chk = 0, sum = 0;
scanf("%[^\n]s", a);
getchar();
if (a[0] == '#') {
return 0;
}
for (int i = 65; i <= 90; i++) {
for (int j = 0; j < strlen(a); j++) {
if ((a[j] == i) || (a[j] == i + 32)) {
if (chk == 0) {
cnt++;
chk = 1;
}
}
}
chk = 0;
sum += cnt;
cnt = 0;
}
printf("%d\n", sum);
}
return 0;
}
* for문을 서로 바꿔도 값은 똑같이 출력됨
몰랐던 개념
- 공백을 포함하여 문자열을 입력 받을 때 :
char 배열[];
scanf("%[^\n]s",배열이름);
*인덱스는 0부터 시작한다
- 여러줄 입력받을때 :
scanf 사이에 getchar(); 써줍니다.
- 문자열 크기 : strlen(배열이름);
* <cstring> 필요
- 아스키코드 : 대문자와 소문자의 아스키코드 차이는 32!
728x90
'Algorithm > Solution' 카테고리의 다른 글
[C++] 2960번 에라토스테네스의 체 (0) | 2021.01.17 |
---|---|
[C++] 2167번 2차원 배열의 합 (0) | 2021.01.17 |
[C++] 11944번 NN (0) | 2021.01.10 |
[C++] 2609번 최대공약수와 최소공배수 (0) | 2021.01.10 |
[C++] 1100번 하얀 칸 (0) | 2021.01.10 |