강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

gisung2215님의 프로필 이미지
gisung2215

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

54. 올바른 괄호 (STL stack 자료구조 활용)

while(scanf("%c", &ch) != -1)

작성

·

693

0

#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를 반환받습니다.

gisung2215님의 프로필 이미지
gisung2215

작성한 질문수

질문하기