ijm91   8년 전

현재까지 소스는, 먼저 ABC DEF 입력을 받는다면,


ABC는 진행방향이 ->

DEF는 진행방향이 <-

이기때문에, 보기쉽게 

arr[] = [C,B,A,D,E,F] 형태로 재배치 했습니다.

배열의 mid 값을 이용해서

(T에 따라 mid는 1,2,3으로 증가합니다)

초가 증가함에 따라, -1, +1을 누적해서


1초 지난 시점 ) mid+1, mid 값 arr[3]<->arr[4]를 교환하려 하였고,

2초 지난 시점 ) arr[1]<->arr[2] , arr[4]<->arr[5]를 해주고 싶습니다. 


즉 2초가 지난시점에 CBADEF -> CDBEAF 형태가 되야하는데

제가 저렇게 설계한것도 맞는건지 잘 모르겠고,, 2초가 지난시점에 교환이 2개가 되게 하려면 어떻게해야하는지도 조금 이해가안되네요ㅠㅠ

제가 설정한 방법으로 해도 풀이가 가능한건지 궁금합니다!

현재까지 해놓은 2중for문으로 가능한건지..ㅠㅠㅠ

ghzm20056   7년 전

제가 보기에 이중 for 문 돌려도 정답은 나오는 데 작성자님의 2중 for문으로는 해당 답이 나올수가 없습니다. 왜냐하면

마지막 s 번까지 도는 건 맞지만 array의 전체를 돌면서 j와 j+1 이 서로 반대상황인지 파악이 우선이기에

음 flag값을 가지는거도 좋다고 생각해요. 그래서 2중 for문에는 제한조건을 둘다 s보다 작은게 아니라 inner for문에는 j<0; j<antSum이 더 맞을 거같아요

작성자님꺼는 중간에서 부터 바꾼다고 생각하셔서 mid 라는 변수를 두었으리라 생각이됩니다. 그런데 처음에는 중간이 맞죠

그러나 지날수록 반대방향이되는 개미들은 2개 3개 4개로 늘어나기에 array의 처음부터 확인이 필요하다는 생각이드네요. 그리고 한번움직인 개미는 그 해당 s에는 움직일수 없겠죠 ?? 즉 CBADEF 에서 C B부터 검사하면서서로 반대 개미인지 확인하구 아니면 넘어가구 다음 BA 가 반대인지 다음 AD 가 반대인지 확인하면 교환되겠죠?

그러면 DA 로 교환하구 이때 j는 ++되면 A자리로 가죠 ? 그러면 안되요 그러면 A를 건너뛴 E로 가야 올바른 알고리즘이되죠 이런식으로 하면 2개든 3개든 변하게됩니다.

이해가 되시길 바라며 혹시나 이해가안되시면 알고리즘 부분 2중for문의 코드를 보내드릴수있어요 ~~

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