kyaryunha   6년 전

2591 숫자카드 문제... 시간초과가 나네요.

for문이 n번돌아가는지라, 딱히 다른 곳에서 시간복잡도 걸린것 같진 않고,

유일하게 무한루프가 돌아가는 곳이 while문인지라 입력부에서 무한루프가 끝나지 않아 시간초과가 난 것 같습니다..


그런데 어떻게 고쳐야 할까요..?ㅜㅠ


왜 무한루프가  끝나지 않는걸까요..? 입력데이터 중 엔터가 없는걸까요..? 그렇다면 어떻게 끝나는 것을 인식할 수 있을까요?


혹시 string 으로 입력 받아 변환하는 방법 말고, 아래와 동일하게 char로 입력받는 방법 중에, 

해결방법 아시는 분 있다면 알려주시면 감사하겠습니다..!

djm03178   6년 전

scanf가 입력 스트림에서 더이상 읽을 게 없으면 EOF (-1) 라는 값을 반환합니다. 그 값을 이용해서 끝을 체크할 수 있습니다.

또는, 그냥 scanf("%s", arr); 로 받고 strlen으로 문자열의 길이를 구하는 게 제일 편합니다.

kyaryunha   6년 전

오오 scanf가 무언가를 반환할 수 있군요...! 처음 알았습니다..! 알려주셔서 감사합니다..!

그럼ㅁ 읽을게 있으면 1을 반환하는 그런거려나요....!! 


strlen으로 편하게 짤 수도 있지만, 제가 입출력을 너무 못하는것 같아서, 일부러 좀ㅁ 다르게 짜면서 이것저것 입출력 연습하고 싶었달까요..!

djm03178   6년 전

scanf가 반환하는 값은 정상 처리된 입력의 수입니다. 읽을 게 있어도 정상적인 입력이 아니면 (%d 서식인데 알파벳이 입력들어왔다거나) 수를 세지 않습니다. EOF가 특수한 경우로서 -1을 반환합니다.

kyaryunha   6년 전

오오....!! ((scanf 다시봄ㅁ..!! 이런저런 기능을 담고 있는 거였군요..!!))

새로운 정보 알려주셔서 감사합니다...! 

kyaryunha   6년 전

@djm03178

앗 근데 혹시 while(scanf("%d",&a)==-1)로 돌리면 제출했을땐 상관 없어도, 코드블럭으로 직접 컴파일 할때는 EOF를 지정해줄 수 가 없는데,

양쪽다 멈추게 하려면 어떻게 해야 하려나요..??

djm03178   6년 전

윈도우즈에서는 컨트롤 Z, 유닉스 계열 시스템에서는 컨트롤 D를 입력하면 됩니다.

kyaryunha   6년 전

오오 굉장히 배경지식이 많은 분이시군요....!!

새로운 정보 감사합니다! :)

댓글을 작성하려면 로그인해야 합니다.