while(scanf("%c", &ch) != -1)
698
작성한 질문수 3
#include <stdio.h>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
char ch;
stack<char> s;
while(scanf("%c", &ch) != -1){
if(ch == '(') s.push(ch);
else if(ch == ')'){
if(s.empty()){
printf("NO");
return 0;
}
s.pop();
}
}
if(s.empty()) printf("YES");
else printf("NO");
return 0;
}
테스트케이스 1번, 5번 경우에서 타임 리미트가 발생합니다ㅠㅠ.
scanf("%c", &ch) != -1) 이 표현이 잘못된 표현인지 궁금합니다. scanf로 읽는 동시에 처리하는 거랑 배열로 다 읽은 후 처리하는데 차이가 있나요?? 항상 좋은 강의 감사합니다.
답변 1
1
while(scanf("%c", &ch)) 는 문자를 읽는 동시에 처리하지 않습니다. 문자열이 입력되면 엔터가 들어올때까지 버퍼에 먼저 문자열을 저장하고 그 다음 버퍼에 있는 문자열에서 문자를 하나씩 가져오는 방식입니다. 즉 엔터가 들어오고 나서 scanf("%c", &ch)가 작동한다고 봐야 합니다. 그리고 ch에 엔터기호까지 읽고 난 후 다른 입력을 기다립니다. %c로 문자를 읽을 때는 조심해야 합니다. 구글링해서 getchar 과 getch 함수의 차이를 공부해보세요. scanf는 getchar과 동일하게 작동합니다.
엔터 아스키 번호가 10번이니까 다음과 같이 고치면 100점 나올겁니다.
while(scanf("%c", &ch) && ch!=10)
한가지 더 말씀디리면 scanf함수는 입력받은 값의 개수를 리턴받습니다. 위의경우는 하나 입력받은니까 1를 반환받습니다.
테스트 케이스 질문
0
373
1
병합정렬 시간복잡도 질문
0
462
1
41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.
0
1345
2
질문드립니다.
0
376
1
질문드립니다!
0
430
1
dev 프로그램 질문
0
275
1
문제가 이해가 안되요
0
376
1
4번 나이차이 문제 접근법 질문 드립니다.
0
307
1
source file not compiled
0
1047
3
59번 질문드립니다.
0
372
1
25번 문제 질문
0
349
1
4. 나이차이 문제 질문입니다.
0
372
1
90번 라이언 킹 심바 1번 테스트 케이스
0
470
1
71번 문제 전역 변수 질문 있습니다
0
365
1
75번, 79번 priority_queue관련
1
356
1
75.최대 수입 스케줄
0
400
2
복면산 정답의 수
0
431
1
테스트 케이스에 대해서
0
445
1
수업 내용 질문입니다!
1
232
1
풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!
0
822
2
12. 플로이드-와샬(그래프 최단거리) . 27:25초
0
255
1
다른 풀이 방식
0
317
1
크루스칼 vs 프림
0
306
1
숫자 총개수 small 질문있습니다.
0
243
1





