niklasjang   4년 전

현 상황

1. ideone에서 런타임 에러나는 것은 int check[1001][1001]; 배열의 크기를 [2002][2002]에서 [1001][1001]로 줄여서해결
2. 하지만 백준에서는 여전히 runtime error

3.  g++ 14226.cpp -o Main -O2 -Wall -lm로 14226.exe 만들고 실행 후 1000 입력하면 결과가 제대로 나오지 않음.  적당히 작은 숫자는 결과가

나오는데 입력된 숫자가 커지면 나오지 않음

4. 강의 듣고 아래 코드에서 curr.first + curr.second <= S 부분을 추가하면(주석을 제거하면) 백준에서도 runtime error가 뜨지 않음.

질 문 

0. 배열 크기나 컴파일러 문제가 아니라 코드 문제인가요?

1. curr.first 는 스크린에 작성된 이모티콘의 갯수,  curr.second는 클립보드의 이모티콘 갯수를 의미합니다.  두 개의 합이 S, 최종적으로 구해야하는 갯수,보다 작은 경우로 필터링하는 것이 이해가 안됩니다.  

2. 여러번 확인했지만 질문하면서 다시 확인합니다... 이전 문제까지는 VS로 컴파일 하다가 gpp에서 해보려고 하는데 아래와 같이 컴파일하고 실행하는게 맞나요?

$ cd {project directory}

#####replace10#####nbsp;g++ 14226.cpp -o Main -O2 -Wall -lm    

$ Main.exe

$ 숫자 입력

djm03178   4년 전

답변을 달았다가, 질문 포맷에 맞춰서 다시 답해 드립니다.

0. 당연히, 무조건, 반드시 코드의 문제입니다. 코드 문제이면서 배열 크기의 문제입니다. 배열 크기를 코드에서 정의했으니, 당연히 코드의 문제입니다. 컴파일러는 절대로, 100% 확증이 없다면 절대로 의심해서는 안 됩니다. 컴파일러를 의심하기 시작하는 순간부터는 그 코드의 문제점을 찾아낼 수 없게 됩니다. 문제가 발생했다면 무조건 자신의 코드를 의심하세요.

  1. 그 필터링이 N이 더 커져도 항상 맞는지는 모르겠지만, 적어도 문제에서 제시한 범위 내에서는 항상 답을 찾습니다. 필터링을 하지 않으면 답에 도달하기 전에 1000을 넘어간 것들이 큐에 들어갈 수 있습니다. 개수가 적다고 항상 더 빠른 시간 내에 입력해낼 수 있는 게 아니기 때문입니다.
  2. 네, 그렇게 하면 됩니다.

niklasjang   4년 전

s보다 작은 a에 대해서, 그리고 (s,*)는 `(s,0) ~ (s,s) 중 어떤 것도 다 될 수 있다`라는 의미를 가질 때,

(a,b)에서 크기가 1인 간선을 여러번 지나서 (s,*)를 구하는 것이

1인 간선을 여러번 지나서 (s+1,*)로 간 뒤에 (s,*)로 가는 경우보다 항상 빠르다는 것을 증명해보고 싶은데 잘 안됩니다. 

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