2015112119   5년 전

가령 예제에서 6을 입력하면 

1 ->2 (연산 횟수 = 복사(1)+붙여넣기(1) = 2) -> 4( 연산 횟수 = 2 + 복사(1)+붙여넣기(1) = 4) 

-> 3(연산 횟수 = 4 + 빼기1 = 5) ->6(연산 횟수 = 5 +  복사(1)+붙여넣기(1) = 7 즉 7이 되는데 왜 5인지 잘 모르겠네요..

복사하고 붙여넣으면 결국 2를 더하는게 아닌가요? 제가 생각을 잘못하고 있는건가요?

입력 18도 13이 맞는거같은데 1 ->2 ->4 ->3 -> 6 ->5 ->10 ->9 ->18 어떻게 8번으로 바로 하는지 모르겠습니다..

djm03178   5년 전

복사를 한 번 했으면 붙여넣기는 여러 번 할 수 있습니다.

1(0) -> 1(1) -> 2(1) -> 2(2) -> 4(2) -> 6(2)

또는,

1(0) -> 1(1) -> 2(1) -> 3(1) -> 3(3) -> 6(3)

으로 5번만에 가능합니다.

2015112119   5년 전

아 이제 이해했네요.. 감사합니다!

그럼 이 문제는 bfs로 큐를 이용해 저장해 주는 것은 좋은데 복사했을 때 그걸 계속 사용하려면 배열 하나를 새로 만들어서 저장해 주어야 하나요?

복사한 데이터를 어떻게 해야 할까요? 

djm03178   5년 전

2개의 차원으로 나누어보세요.

visited[화면에 출력된 개수][클립보드에 복사된 개수]

2015112119   5년 전

덕분에 도움이 많이 된 것 같아요! 감사합니다~

그런데 제가 처음에 visited배열을 [1001][1001]로 설정했는데 딱 6중반까지만 작동하고 그다음부터는 오버플로가 발생하는거같더라고요

그래서 visited[3001][20001]같이 크게 잡은 뒤에 다시 돌렸더니 성공했습니다.

문제에서는 1000까지라고 해서 1001로 잡았는데 왜 이렇게하면 넘치는걸까요? 보통 배열크기를 어느정도로 잡아야하나요?

djm03178   5년 전

정답을 구하기 위해 필요한 건 약 1000개씩일지라도, 실제 BFS를 하면서는 더 멀리까지 가질 수도 있습니다. 그런 경우 불필요한 부분은 아예 큐에 넣지 않도록 처리를 해야겠죠.

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