bby4184   2년 전

buff에 가능한 갯수 값을 저장해두고 최솟값을 찾으려고 했는데

이대로 돌려보니 buff에 이미 최솟값이 저장 되서 제출하니 맞았어요.

이상한게 예로 15를 넣어보면

i=0, j=5 일 때 buff[0]=5 저장되고

i=3, j=0 일 때 buff[1]=3이 저장되어야 하는거 아닌가요?

buff만 따로 출력해보니 n이 15일 경우 3 3으로 3만 들어 있네요

djm03178   2년 전

가장 바깥의 루프는 생각하지 말고 안쪽의 10번째 줄에서 17번째 줄만 봅시다. 이 부분에는 k값을 변화시키는 요소가 없으니 루프가 다 끝날 때까지 똑같은 buff[k]에만 값을 쓸 것입니다.

k가 0일 때를 생각해 보면 말씀하신 대로 i = 0이고 j = 5일 때에 한 번 buff[0]에 5가 쓰여지겠지만, 여기서 break를 하면 루프를 다 나가는 게 아니라 11번째 줄의 루프만 탈출합니다. 그러면 10번째 줄의 루프는 계속해서 돌면서 i가 1, 2, 3이 되고, 그 때 j = 0일 때 다시 한 번 buff[0]에 3이 쓰여지면서 이전에 썼던 5는 덮어씌워지게 됩니다.

이후에 k가 1이 되어도, 2가 되어도, 999가 되어도 방금과 똑같은 작업을 서로 다른 buff[k]에 대해서 수행할 뿐이기 때문에, buff[0]부터 buff[999]까지 전부 정답이 들어있게 됩니다. 즉, 애초부터 1000개를 돌릴 필요 없이 10~17번째 줄 자체가 그냥 정답을 구하는 코드입니다.

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