mraz3068   2년 전

저는 index 0 즉, 첫번째 수가 0이면 0으로 바꾸고 1이면 1로 모두 바꾸자라는 판단 근거를 (생각해보니 0이 먼저나오면 '01' 이 나오면 ++

1이 먼저 나오면 '10'이 나오면 카운트하면 되기때문 )  세우고 이를 통해 코드를 짜서

맞았는데

왜맞았는지를 잘 모르겟습니다

해당 근거가 min(0으로 바꾼경우 최소횟수, 1로 바꾼경우 최소횟수)와 동일하지 않은 것 같은데 말입니다

답변주시면 감사하겠습니다 

sth3353   2년 전

0과 1의 연속을 각각 묶음으로 생각하고, 묶음의 수가 적은 쪽을 뒤집는 것이 정답입니다.

작성자분께서 사용하신 방법대로라면 이것과 동일한 결과를 가져오게 됩니다.

문자열이 0으로 시작하는 경우로 생각해봅시다. 이 코드에서는 0에서 1로 변하는 지점의 개수를 출력합니다.

만일 묶음의 수가 짝수라면, 0,1,0,1...0,1과 같은 형태가 되므로 0에서 1로 변하는 지점의 개수가 정답입니다.

만일 묶음의 수가 홀수라면, 0,1,0,1...0,1,0과 같은 형태가 되고, 묶음의 수가 적은 쪽은 1이므로 역시 정답입니다.

문자열이 1로 시작하는 경우도 동일합니다.

mraz3068   2년 전

오 친절한 답변 감사합니다...

제 풀이가 동일한 결과를 가져온다라는 것을 설명해주셔서 감사합니다 

그런데 예시부분 (만일 묶음의 수가~)이 잘 이해가 되지않는데 혹시 설명해주실수있을까요...?

묶음이므로 그 개수가짝수든 홀수든 0,1 ) 로 끝나지 않나 생각이 들어서요

읽어주셔서 감사합니다 

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