minjae200   5년 전

우선 S와 T를 입력받아서

'1'의 갯수를 각각 count해주었습니다.

또 S가 '?'일때 T가 '1'이면 Qoindex에

'0'이면 Qzindex에 넣어주었습니다.(vector : index를 저장하기위해서)

그다음 ?는 한번씩은 연산을 해야하므로 changeCnt++를 해주었습니다. (?갯수만큼)

S에 '1'이 T보다 많으면 S를 T로 바꿔주는것이 불가능하므로 -1을 출력하고 continue;를 해주었고

1의 갯수가 같으면 '?'를 0으로 채워줬습니다.

T의 1의 갯수가 많으면

Qoindex부터 T와 S를 맞춰주기위해서 '1'을 넣어주었고 Sone == Tone이 되는순간까지 진행해주었습니다.

(여기서 Qoindex 와 Qzindex를 선언한 이유는 ?를 T에 맞게 변환해주면 최소연산횟수가 나온다고 생각했습니다.

---> 여기까지 모든 작업이 그냥 S와 T의 1의 갯수를 맞춰주는데 있습니다.

그다음 이를 토대로

cnt1과 cnt2를 선언하고 여기서 cnt1은 S[i]가 '0' T[i]가 '1'인 경우 증가
cnt2는 반대입니다.

이렇게 해준이유 : S[i]==0이고 T[i]==1이고 S[j]==1 이고 T[j] == 0 이면 서로 교환하는 연산으로

1번만 해주면되므로 이를 체크하기 위해 선언하였습니다.

예를들어

S = 0000
T = 1111 이면 cnt1 = 4 cnt2 = 0 이므로 교환할수없고 0을 1로 바꿔주는 연산 4번을 수행해야 합니다.

S = 1010
T = 0101 이면 cnt1 = 2 cnt2 = 2 이므로 서로 2번교환하여 S를 T로 만들어줄수있습니다.

이런아이디어로 구현해보았는데 제가 만든 TC는 모두 예외없이 통과하는거 같은데

혹시 반례가 있는지 궁금합니다. (당연히 주어진 TC는 통과합니다 ㅠㅠ) 도와주세요

minjae200   5년 전

아................출력이 틀린거였어요 돌아버리겟네요 ^^

Case : %d : %d\n 으로 되어있었네요

Case %d: %d\n 입니다 ㅠㅠ

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