2591번 - 숫자카드
2591 숫자카드 문제... 시간초과가 나네요.
for문이 n번돌아가는지라, 딱히 다른 곳에서 시간복잡도 걸린것 같진 않고,
유일하게 무한루프가 돌아가는 곳이 while문인지라 입력부에서 무한루프가 끝나지 않아 시간초과가 난 것 같습니다..
그런데 어떻게 고쳐야 할까요..?ㅜㅠ
왜 무한루프가 끝나지 않는걸까요..? 입력데이터 중 엔터가 없는걸까요..? 그렇다면 어떻게 끝나는 것을 인식할 수 있을까요?
혹시 string 으로 입력 받아 변환하는 방법 말고, 아래와 동일하게 char로 입력받는 방법 중에,
해결방법 아시는 분 있다면 알려주시면 감사하겠습니다..!
scanf가 입력 스트림에서 더이상 읽을 게 없으면 EOF (-1) 라는 값을 반환합니다. 그 값을 이용해서 끝을 체크할 수 있습니다.
또는, 그냥 scanf("%s", arr); 로 받고 strlen으로 문자열의 길이를 구하는 게 제일 편합니다.
오오 scanf가 무언가를 반환할 수 있군요...! 처음 알았습니다..! 알려주셔서 감사합니다..!
그럼ㅁ 읽을게 있으면 1을 반환하는 그런거려나요....!!
strlen으로 편하게 짤 수도 있지만, 제가 입출력을 너무 못하는것 같아서, 일부러 좀ㅁ 다르게 짜면서 이것저것 입출력 연습하고 싶었달까요..!
scanf가 반환하는 값은 정상 처리된 입력의 수입니다. 읽을 게 있어도 정상적인 입력이 아니면 (%d 서식인데 알파벳이 입력들어왔다거나) 수를 세지 않습니다. EOF가 특수한 경우로서 -1을 반환합니다.
오오....!! ((scanf 다시봄ㅁ..!! 이런저런 기능을 담고 있는 거였군요..!!))
새로운 정보 알려주셔서 감사합니다...!
@djm03178
앗 근데 혹시 while(scanf("%d",&a)==-1)로 돌리면 제출했을땐 상관 없어도, 코드블럭으로 직접 컴파일 할때는 EOF를 지정해줄 수 가 없는데,
양쪽다 멈추게 하려면 어떻게 해야 하려나요..??
윈도우즈에서는 컨트롤 Z, 유닉스 계열 시스템에서는 컨트롤 D를 입력하면 됩니다.
오오 굉장히 배경지식이 많은 분이시군요....!!
새로운 정보 감사합니다! :)
댓글을 작성하려면 로그인해야 합니다.
kyaryunha 5년 전
2591 숫자카드 문제... 시간초과가 나네요.
for문이 n번돌아가는지라, 딱히 다른 곳에서 시간복잡도 걸린것 같진 않고,
유일하게 무한루프가 돌아가는 곳이 while문인지라 입력부에서 무한루프가 끝나지 않아 시간초과가 난 것 같습니다..
그런데 어떻게 고쳐야 할까요..?ㅜㅠ
왜 무한루프가 끝나지 않는걸까요..? 입력데이터 중 엔터가 없는걸까요..? 그렇다면 어떻게 끝나는 것을 인식할 수 있을까요?
혹시 string 으로 입력 받아 변환하는 방법 말고, 아래와 동일하게 char로 입력받는 방법 중에,
해결방법 아시는 분 있다면 알려주시면 감사하겠습니다..!