worl5604   5년 전

queue에 1이 들어가는 index를 넣고,

해당 위치에서 부터 한라인씩 늘려가면서 최대값을 찾으려고 합니다.

예외케이스 최대한 대입해봤는데 다 정상적으로 나옵니다

문제는 틀렸다고 나오네요.

어떤 예외케이스가 있는지 부탁드립니다.

djm03178   5년 전

예외 케이스를 찾기보다 코드 로직의 문제를 살펴보세요. 잘못된 곳이 여럿 있습니다.

  1. 문제에는 n(세로), m(가로) 순으로 입력이 들어오는데 입력은 m, n 순으로 입력받고 사용도 그렇게 하고 있습니다.
  2. scanf("%1d") 는 int에 저장합니다. 즉, 지정된 주소에 int의 크기(채점 환경에서는 4바이트)가 쓰여지는데 char형에 이렇게 할 경우 주변의 4바이트가 덮어쓰여집니다. 실행 환경이 little endian을 쓰느냐 big endian을 쓰느냐에 따라서도 동작이 달라질 수 있습니다. 굳이 char 배열에 저장해야겠다면 다른 int형 변수에 저장하고 그를 다시 배열 원소에 대입하는 것이 올바릅니다.
  3. 28번째 줄에서 n은 세로 길이인데 x와 y 모두에 n에 대한 식을 적용하고 있습니다. y에 대한 식은 m - y가 되어야 합니다. 또한, 둘 중에 큰 쪽이 아니라 작은 쪽으로 해야 배열 범위를 벗어나지 않습니다.
  4. 시간 초과가 날 수밖에 없는 코드입니다. n*m칸 모두에 1이 들어있다고 가정하면, n*m칸 각각에 대해 O(n*m)개의 배열 원소에 접근해야 하므로, 최악의 경우 O(n^2*m^2) ~= 1조 정도가 걸립니다. 이 문제는 O(nm)에 해결하기를 요구하는 문제입니다.

worl5604   5년 전

단순히 코드 짜는데만 급급해서 중요한걸 인지하지 못했네요..

다시 공부해서 풀어보겠습니다!

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