nagion   5년 전

C++, BFS 방식으로 풀어보고 있습니다. 제목처럼 예제란 예제는 다 넣어도 맞다고 나오는데 왜 채점은 틀렸는지 모르겠어요.. 원인이 뭘까요ㅠ?

luniro   5년 전

입력:
10 10
##########
#RB....#.#
#..#.....#
#........#
#.O......#
#...#....#
#........#
#........#
#.......##
##########
출력:
10

이렇게 나오는데 -1이 나와야 하지 않을까요?

nagion   5년 전

위 예제는 10이 맞지 않나요..?

djm03178   5년 전

저건 10이 맞습니다.

무슨 컴파일러를 사용하시는지는 모르겠지만, 제가 이 코드를 컴파일하면 다음과 같은 경고가 발생했습니다.

1>c:\users\new\source\repos\tester\wrong\wrong.cpp(103): warning C4477: 'scanf' : 서식 문자열 '%d'에 'int *' 형식의 인수가 필요하지만 variadic 인수 1의 형식이 'char *'입니다. 1>c:\users\new\source\repos\tester\wrong\wrong.cpp(103): note: 서식 문자열에서 '%hhd'을(를) 사용하는 것이 좋습니다. 1>c:\users\new\source\repos\tester\wrong\wrong.cpp(103): warning C4477: 'scanf' : 서식 문자열 '%d'에 'int *' 형식의 인수가 필요하지만 variadic 인수 2의 형식이 'char *'입니다. 1>c:\users\new\source\repos\tester\wrong\wrong.cpp(103): note: 서식 문자열에서 '%hhd'을(를) 사용하는 것이 좋습니다.

컴파일러의 경고는 함부로 무시해도 되는 것이 아니며, 경고를 띄우는 것은 다 이유가 있습니다. 코드를 보면 char형 변수인 n, m에 %d로 입력을 받고 있는데, scanf에게 %d를 주면 무조건 sizeof(int)만큼의 메모리에 값을 넣으므로 char형 변수인 n과 m에게 할당된 공간을 벗어나버립니다. 저것만 고치니 맞았습니다.

nagion   5년 전

최대값이 10인 변수들이어서 char형으로 선언한 것인데 그게 원인이군요... 감사합니다!

luniro   5년 전

제가 저 예제를 손으로 풀었을 때 11이 최소여서 그랬습니다 죄송합니다

> v > ^ < v > ^ < v <

> v > ^ > v > ^ < v <

이 두 가지 경우였는데, 더 빠른 방법을 찾아봐야겠네요

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