kimsy96   1년 전

일단 이문제를 맞혀버려서 소스코드를 다 올리는 건 좀 아니라고 생각해서 소스코드의 부분만 올립니다. 혹시 질문에 답변해주시는 분이 계시다면, 그리고 그분이 풀코드를 보지않고는 모르겠다고 하시면 그 때 올리겠습니다. 

x와 y좌표를 각각 입력받고 그걸 배열에 저장해서 크기별로 정렬한다음 앞에 4개가 같고 뒤에 2개가 같은지(앞에 4개의 값은 각변의 길이, 뒤의 2개의 길이는 대각선의 길이)를 확인하는 형식으로 알고리즘을짰습니다.

처음에 이런식으로 풀고 제출을하니 시간초과가 나더라고요, 복잡도를 대충계산해봐도 아닌거 같아서 보니 저 밑에 부분의 k를 전역적으로 선언했을 때 시간초과 오류가 났었습니다. 지역변수로 선언하니 맞았구요.(저 식은 좌표들의 길이의 제곱을 저장하는 배열).

저 k를 전역적으로 쓰면 문제에서 n을 입력받을 때 마다 초기화가 안되서 틀렸다 라고 떠야할텐데 왜 시간초과라고 떳을까요?

(초기화가 되지 않으니 두번째 정사각형 좌표 4개 입력할때, 배열의 크기를 넘어가 버려 틀렸습니다 라거나 런타임에러가 발생해야하는게 아닐까요)

chogahui05   1년 전

이것만 봐서는 어떤 상황인지를 잘 모르겠는데..

지역변수로 선언하니 맞았구요. 전역변수로 선언하니까 시간 초과가 났다. 라는 내용이 있는 걸로 봐서는..


정사각형 check하는 코드가 있는데.

k를 초기화를 안 해줘서, 범위를 벗어나는 곳에 접근했고. 그렇게 되어서 시간초과가 되지 않았나 싶네요.

차라리 스포를 원하시지 않으시면..

핵심 알고리즘을 생략하고.


(1) 배열에 넣는 것.

(2) k값이 변하는 것만 보여주셔도 될 거 같은데.


답변에 필요한 핵심적인 부분이 없어서 무엇이 원인인지 설명드리기가 힘드네요.

kimsy96   1년 전

네. 제가 묻고 싶은걸 딱 짚으셨네요
범위를 벗어났으면 틀렸습니다 라거나 런타임에러가 나야하는거아닌가요?
시간초과라는 메세지가 뜨길래 의아해서 물어봅니다

djm03178   1년 전

어딘가에 무한루프가 걸렸거나 초기화를 안 한 결과 아주 긴 루프를 돌게 되는 경우가 있을 수도 있겠죠.

chogahui05   1년 전

그건 저도 의아한 점이긴 합니다만..

간혹 가다가 저 같은 경우도

int a[30000]; 이렇게 선언해 놓고

a[88888] = 7;

이런 코드를 넣어놓았을 때, 런타임이 아닌 시간초과가 뜨기도 하더군요. 이게. 사실 정의되지 않은 동작을 수행해서 그런 듯 싶네요.


아마도. 제가 봤을 때는

k값이 전역으로 선언이 되긴 되었는데, 어딘가에서 잘못 업데이트가 되고 있어서

의도치 않게 range를 초과하는 경우가 발생했고, 그것 때문에 정의되지 않은 동작을 수행한 거 같네요.

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