ekfrhkquf12   4년 전

어디가 틀렸을까요? ㅠ n과 m 문제인데 반례를 혹시 제시해 주실 수 있으면 고치는 데 도움이 될 것 같습니다.

예제들에 대한 대답은 다 잘 나오는 것 같습니다.

중복되는 숫자들이 몇 번 나오는지를 저장한 리스트를 만들고,

중복되는 숫자들의 count를 줄이면서 dfs를 하는 식으로 코드를 짰습니다.

slah007   4년 전

풀이는 맞다고 생각합니다만 아마 출력할 답이 많을 경우 모든 경우를 탐색하기 전에 RUNTIME ERROR를 띄우면서 프로그램이 멈춰서 틀릴 것 같습니다.

예를 들면 아래와 같은 경우

input :

8 8

1 2 3 4 5 6 7 8

output :

1 2 3 4 5 6 7 8

1 2 3 4 5 6 8 7

...

8 7 6 5 4 3 2 1

잘 탐색하면 답인 8! = 40320가지만 보면 되지만, DFS로 위와 같이 돌면 8^8 = 16,777,216번(맞나?) 번이나 함수를 호출하게 되어 최대 함수 스택 수를 넘어 프로그램이 감당을 못 합니다.

ekfrhkquf12   4년 전

런타임 에러면 런타임 에러라고 나오지 않나요 ㅠㅠ 

근데 저는 "틀렸습니다"가 나옵니다. ㅜㅜㅜ 

slah007   4년 전

저도 BOJ에서 런타임 에러인데 "틀렸습니다"라고 나와서 디버깅하기 까다로웠던 경우가 있었습니다. 아마 출력을 좀 내다가 RTE가 나오면 그 전까지 나온 답을 비교해서 "틀렸습니다"가 나오는거 같기도 해요.

위의 코드로 제가 직접 돌려봤을 때에는 아래 입력에서 출력이 1 2 3 4 5 6 7 8 ~ 8 7 6 5 4 3 2 1까지 가지 않고 중간에 터지는 거 보니 RTE 맞는 거 같아요.

8 8

1 2 3 4 5 6 7 8

ekfrhkquf12   4년 전

아아 그렇군요..

그럼 함수를 어떻게 호출해야 할까요?

if (data2[i][1] != 0): 라는 조건을 8x8번 보게 되어서 RTE가 나오는 건가요?

함수 호출은 저 조건으로 하면 8!만큼만 일어나지 않나요 ..?

ekfrhkquf12   4년 전

list comprehension에서 연산이 너무 많이 일어났던 것 같습니다.

그냥 배열 만들어서 숫자 count 해주는 식으로 해서 카운트하니 잘 돌아갔습니다.

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