728x90
문제출처: https://www.acmicpc.net/problem/7600
7600번: 문자가 몇갤까
각 줄마다 출몰한 알파벳의 개수를 출력하면 된다.
www.acmicpc.net
1. 코드
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
char arr[260];
while (1) {
int count=0; //중복 글자가 아닐때 하나씩 증가
int check = 0; //중복 글자인지 체크
int sum=0;
scanf("%[^\n]s", arr);
getchar();
if (arr[0] == '#') {
return 0;
}
for (int i = 65; i <= 90; i++) {//아스키 코드 대문자
for (int j = 0; j < strlen(arr); j++) {
if ((arr[j] == i) || (arr[j] == i + 32)) {
//대문자 소문자 사이의 차 = 32
if (check == 0) {
count++;
check = 1;
}
}
}
check = 0;
sum += count;
count = 0;
}
printf("%d\n", sum);
}
}
2. 해결과정
#이 입력될때 까지 값을 출력해야하므로, while문을 사용한다.
for문을 이용해서 인덱스 값을 아스키 코드값을 비교해서 카운트 해준다.
중복 글자가 아닐 때를 check를 이용해서 아니면 카운트값이 하나 증가하고, check 값을 1로 바꾼다. check가 0일때만 카운트값이 증가하기 때문에 중복된 글자가 카운트 되는 것을 방지할 수 있다.
3. 느낀점
아스키 코드를 이용해서 대문자와 소문자를 체크해줘야하는데 32차이라는 것을 검색을 해서 알았다.
여러 줄을 입력 받을 때는 "[^\ㅜ]s" 를 이용하고 getchar()도 해줘야한다는 점!!
728x90
'공부 자료 > 알고리즘' 카테고리의 다른 글
(C/C++) 백준 1259번 - 팰린드롬수 (0) | 2021.07.06 |
---|---|
(C/C++) 백준 1100번 - 하얀 칸 (0) | 2021.07.05 |
(C/C++) 백준 2711번 - 오타맨 고창영 (0) | 2021.07.05 |
(C/C++) 백준 10992번- 별 찍기 (0) | 2021.07.04 |
(C/C++) 백준 1244번- 스위치 켜고 끄기 (0) | 2021.07.04 |