문제링크
코드링크

  • 문제요약

    1. 각 군집들은 1시간마다 이동방향에 있는 다음 셀로 이동
    2. 경계에 도착하면 미생물 절반이 죽고, 이동방향이 반대로 바뀜, 홀수인 경우는 몫만!
    3. 미생물이 0이면 군집삭제
    4. 두 개 이상의 군집이 겹치면 합쳐짐, 미생물이 많은 녀석의 방향을 따른다
    5. m 시간이 지났을 때 남은 미생물 수를 구하라
  • 문제접근
    2차원 배열 origin 과 box를 두개 두고, 각 군집마다 생존여부를 나타내는 isAlive 변수를 저장한다. origin에는 군집 수 idx(들어온 Input 순서)로 현재 위치를 표시하고, box는 다음 이동시의 군집 위치를 표시한다.
    1시간마다 box의 다음 이동위치로 옮기는데, 이때 경계를 만나면 1/2 로 미생물 줄인다. 그리고 다른 군집가 위치가 겹치면 미생물 수를 비교해 생존 여부(방향)만 설정해준다 크기는 grow 변수에 저장하고, 모든 이동이 끝난 다음 크기를 더해준다.

  • 삽질

    • 위치가 겹쳤을 때 순차적으로 미생물 크기를 비교하면서 더해줬다. 이렇게 되면 1,2,3 세개가 겹쳤을 때 3번은 1번과 2번을 더한 값과 비교가 된다.
    • box 배열은 항상 -1로 초기화되어 시작함으로 군집이 사라진다고 -1 체크를 할 필요가 없다. 사라질 때마다 -1로 초기화함으로서, 원래 자기 위치의 군집이 오게되면 -1로 바꿔버려 오답이 생겼다.
    • 1시간 26분 소요