Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- c++
- file IO
- 전자책
- 10773
- Process Communication
- The Balance of the World
- LJESNJAK
- BAKA
- Baekjoon
- 시스템 프로그래밍
- 브런치
- process control
- 입력 버퍼
- 1874
- 균형잡힌 세상
- File 조작
- IT
- 해바
- 5622
- 백준
- 2941
- Zero That Out
- 4949
- system programming
- 바샤
- c
- For Beginners
- Parenthesis
- QA
- 시프
Archives
- Today
- Total
해바
1316) 7. 문자열 : 그룹 단어 체커 본문
문제
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
처음 실행했을 때 또는 처음 입력하는 단어의 경우 이상하게 세는 경우가 있었지만, 코드만 봐선 이상이 없어 보여 대수롭지 않게 넘겼다. 이게 굉장히 잘못된 판단이었다.
원래는
scanf("%d", &repeat);
getchar();
이렇게 개행문자를 비웠는데 이걸
scanf("%d%*c", &repeat);
로 바꿔주니 바로 정답으로 인정해주었다. 구글링 하면 둘 다 개행 문자를 제거하는 데 사용하지만, 작동 방식은 약간 다르다.
getchar는 문자 하나를 받음으로써 버퍼를 비우고,
%*c는 받은 문자에서 하나를 누락시켜 데이터를 버린다.
즉 하나는 일단 버퍼에 갖다놓고 일부러 소비하는 방식이고, 다른 하나는 버퍼에 갖다 놓을 때 하나를 누락시킨 후 갖다 놓는다.
#include "cstdio"
int main() {
int repeat(0), count(0);
scanf("%d%*c", &repeat); // getchar() 대신 사용
for(int i(0); i < repeat; i++) {
char alp('\0'), prev('\0');
bool list[26]{}, check(false);
while(alp != '\n') {
alp = getchar();
if(alp == '\n') break;
if(list[alp - 97] == false) {
// 처음 등장한 알파벳일 경우 체크
list[alp - 97] = true;
check = true;
}
else {
// 이미 나왔던 알파벳이고, 이전 알파벳과 같지 않으면 그룹이 아니므로 체크 안함
if(alp != prev) {
check = false;
while(alp != '\n') alp = getchar();
}
}
prev = alp;
}
check == true ? count++ : count; // 체크한 경우에만 세기
}
printf("%d\n", count);
return 0;
}
'C, C++' 카테고리의 다른 글
10773) 15. 스택 : 제로(Zero That Out) (0) | 2019.08.18 |
---|---|
10828) 15. 스택 : 스택 (0) | 2019.08.18 |
2941) 7. 문자열 : 크로아티아 알파벳(LJESNJAK) (0) | 2019.08.17 |
5622) 7. 문자열 : 다이얼(BAKA) (0) | 2019.08.15 |
2908) 7. 문자열 : 상수(FILIP) (0) | 2019.08.14 |
Comments