dew0135   2년 전

int[10001] count 한 개 사용하고 StringBuilder 사용했는데 여기서 무엇을 어떻게 바꿔야 메모리초과가 안 될까요?

bupjae   2년 전

원래 StringBuilder 를 쓰는 이유는 출력하고 싶은 내용을 모아두었다가 한꺼번에 출력하는 방법으로 출력에 걸리는 시간을 최소화하기 위해 사용합니다.

하지만 이 문제에서는 메모리 제한이 극도로 빡빡하기 때문에 이와 같은 방법을 사용할 수 없습니다.

   

타협점으로는 주기적으로 StringBuilder 에 모아 둔 내용을 출력한 뒤 StringBuilder 를 비우는 방법을 사용할 수 있습니다.

dew0135   2년 전

StringBuilder.Length 와 StringBuilder.Clear()를 이용해 수십번 시도해봤는데 메모리초과 아니면 시간초과가 나오네요.

주기를 길게하면 메모리초과, 짧게하면 시간초과가 떠요.

혹시 답변자분은 c#에서 채점기준에 맞는 주기를 찾으셨나요? 아니면 저랑 다른 방법으로 StringBuilder를 비우셨나요?

bupjae   2년 전

여러가지 실험을 하면서 검증을 해 본 결과 Console.Write 의 수행속도가 기대했던 것 보다 더 느린 것 같습니다.

수동으로 StringBuilder 로 관리하는 것으로는 원하는 성능을 낼 수 없고,

대신 내부에서 출력 버퍼를 자동으로 관리해주는 StreamWriter 를 써야할 듯 합니다.

   

StreamWriter 를 이용하여 표준 출력에 출력하기 위해서는 var out = new System.IO.StreamWriter(Console.OpenStandardOutput()); 을 사용하면 됩니다.

그 이후에는 out.Write(data) 또는 out.WriteLine(data) 이런 식으로 출력을 할 수 있고

출력을 모두 끝마친 후 out.Close() 메소드를 호출하면 됩니다.

dew0135   2년 전

답변자님덕분에 해결했습니다.

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