nzzangyh   4년 전


먼저 통과한 코드 링크는

http://boj.kr/610e9291627142c8...입니다.

시간초과가 뜨는 코드 링크는

http://boj.kr/3ea795a519c84001... 입니다.


두 코드 모두 근본적으로 상어의 속력만큼, 한칸씩 무식하게 다 이동하는 문제가 있습니다.

아래의 코멘트를 참조하여 코드를 수정해주면, 시간초과 나는 코드도 넉넉하게 통과가 되긴합니다.

그런데 왜.. 한칸씩 무식하게 다 이동해주는 전자의 코드는 계속 통과되고, 후자의 코드는 시간초과가 계속 뜨는 건지 이해를 할 수가 없습니다.

두 코드 똑같은 로직을 썼고, list.remove()도 무리가 많이 갈까봐 똑같은 상황에서만 사용해주었고, 후자의 코드는 혹시 메소드로 분리해서 시간이 더 걸리나 싶어서, 메소드도 분리하지 않고 쭉 위에서 아래로 절차적으로 썼는데도.. ㅠㅠ 아무리 봐도 잘모르겠습니다.

무지한 제가 놓치고 있는게 있다면 조언좀 주시면 감사하겠습니다!

ha_ram님의 시간초과에 관한 코멘트 참고)

예를들어서 5X5 격자판이라고 가정할 때 어떤 상어가 1000의 속력으로 이동한다면 이걸 그대로 구현시키면 1000번의 루프를 돌아야 합니다.

그런데 잘 생각해보면 5X5격자판에서 상어가 8번 이동하면 다시 자기자리, 원래 방향을 가진 상태로 되는것을 알 수 있습니다. 따라서 1000번의 루프를 돌 필요가 없이 1000을 8로 나눈 나머지만큼만 이동해도 됩니다.

ha_ram   4년 전

확실하진 않지만 제가보기에는 첫번째 코드는 move함수에서 배열에 있는것을 지역변수로 변경한 다음 이동하는 동안 지역변수에 계속 접근하는 방식을 썻고,

두번째 코드는 계속해서 배열에 접근하는 방식을 쓴 것에서 차이가 나는 것 같습니다.

nzzangyh   4년 전

안녕하세요.

주석도 안달린 코드 봐주셔서 상당히 감사합니다..

말씀해주신 부분이 속도적으로 큰 차이를 내는지는 제가 구글링을 통해 찾아보겠습니다.!

감사합니다.

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