chocokon   7일 전

이문제가 좋은 문제인지 잘 모르겠습니다...

제대로 로직을 짰다고 생각했고 시간효율도 매우 괜찮게 설계했다고 생각했는데 계속 시간초과오류가 뜨더군요.

원인이 뭐지 하면서 매우 오래 고민하고 수정해보고 해도 도저히 해결되지 않았었는데

처음 소스코드에서 endl 을 \n으로 바꿔주니 바로 통과되더라고요.

물론 실무에선 이런 사소한 하나하나도 매우 중요하겠지만

과연 이게 알고리즘 문제해결능력, 사고력과 무슨 관련이 있는건가요?

이건 문제해결 능력,사고력의 영역이 아닌, 단순히 endl이 \n 보다 매우 느리다는 소프트웨어적 지식의 영역 아닌가요..?

이 문제덕분에 하루를 통째로 날렸네요.

djm03178   7일 전

endl이 매우 느리다는 건 그냥 라이브러리가 그렇게 구현되어 있는 걸 문제가 어떻게 해야 좋을까요? 이 문제에서 특별히 그걸 '요구'하는 게 아니고 그건 그 자체로 그런 것인데 왜 문제 탓을 하시는지 모르겠습니다.

이 문제 뿐만이 아니고 전세계에 있는 매우 매우 매우 많은 문제가 endl을 쓰면 시간 초과가 납니다. 그럼 그 문제들은 다 나쁜 문제인가요? 문제 풀이를 하려면 기본적으로 알아야 할 상식을 몰라서 틀린 걸 문제가 나쁘다는 식으로 말씀하시는 게 이해가 안 되는군요.

isku   7일 전

문제를 푸셨다면 문제해결 능력과 사고력의 영역은 이미 해결하신 거 아닌가요?

본인이 설계한 대로 컴퓨터가 정말로 문제를 해결할 수 있는지 확인하기 위해 소프트웨어적 지식의 영역도 알아야 하는 것이죠

만약 이런 확인이 필요가 없다면 굳이 코드를 짜지 않고 이미 문제를 해결하신 걸로 만족하시는게 어떨까요?

백준에는 다양한 문제가 있습니다.

사고력과 관련된 문제도 있고, 때론 글쓴분이 경험하신 것처럼 소프트웨어 영역의 지식이 필요한 문제도 있으며,

번역을 해야하는 수많은 영어 문제도 있으며, 심지어는 정말 많은 노가다를 뛰어야 하는 문제도 있습니다.

이런 문제들을 경험하며, 알아가는 재미로 공부하는게 프로그래밍(PS) 아닐까요?

그리고 제 생각엔 이런 문제들에서 요구하는 능력들이 사소한 것은 아니라고 생각됩니다.

doju   7일 전

문제를 풀어서 맞았습니다!!를 받기 위해서는 결국 하나의 프로그램을 작성해야 하므로 소프트웨어적 지식이 당연히 개입됩니다. 같은 풀이를 생각하더라도 자신이 사용하는 언어와 프로그램이 동작하는 환경을 자세히 알수록 더 빠르고 안전하게 동작하는 프로그램을 작성할 수 있는 것이 당연합니다. 이 지식의 차이가 극대화된다면 심지어는 이론적으로 더 느린 풀이를 생각해 냈더라도 더 빠르게 동작하는 프로그램을 작성할 수도 있습니다.

특히 입출력 부분은 문제를 풀고 주어진 입력에 대한 답을 구하는 것과는 아무런 상관이 없지만 프로그램의 실행 시간에는 큰 영향을 미치기 때문에, 알고리즘 문제를 푸는 사람들에게는 자신이 사용하는 언어에서 지원하는 입출력 방법들의 사용법과 속도를 숙지하는 것이 기본처럼 여겨집니다. 이 부분은 문제 풀이를 처음 접하는 사람들에게 가장 당황스러운 진입 장벽일 수 있다고 생각합니다.

입출력 방법과 관련해 참고할 만한 글을 몇 개 소개해 드립니다.

  • 입력 속도 비교 - cin을 사용한다면 4등에 있는 코드를 삽입하는 것만으로 아주 빨라집니다.
  • 출력 속도 비교 - '\n'을 사용한 것은 6등, endl을 사용한 것은 39등입니다.
  • 빠른 A+B - 입출력 방법과 관련한 주의 사항과 팁들이 정리되어 있는 문제입니다.

방법별로 속도가 얼마나 차이나는지를 보시면 이게 왜 기본처럼 여겨지는지, 왜 endl을 쓰면 시간 초과가 나고 '\n'을 쓰면 맞는다는 이유로 문제를 비난할 수 없는지 알 수 있으실 거라 생각합니다. 진입 장벽을 하나 넘었다고 생각해 주시면 좋겠네요.

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