Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

최's 먹공로그

SWEA2382_[모의 SW 역량테스트]미생물 격리 본문

APS

SWEA2382_[모의 SW 역량테스트]미생물 격리

ChoiSH313 2019. 8. 24. 22:42

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl


문제정리

1. 가장 바깥쪽 가장자리 부분에 위치한 셀들에는 특수한 약품이 칠해져 있다.

2. 최초 각 미생물 군집의 위치와 군집 내 미생물의 수 , 이동 방향이 주어진다.

약품이 칠해진 부분에는 미생물이 배치되어 있지 않다. 이동방향은 상 , 하 , 좌 , 우 이다.

3. 각 군집들은 1시간마다 이동방향에 있는 다음 셀로 이동한다.

4. 미생물 군집이 이동 후 약품이 칠해진 셀에 도착하면 군집 내 미생물의 절반이 죽고,

이동방향이 반대로 바뀐다.

5. 이동 후 두 개 이상의 군집이 한 셀에 모이는 경우 군집들이 합쳐지게 된다.

합쳐 진 군집의 미생물 수는 군집들의 미생물 수의 합이며, 이동 방향은 군집들 중

미생물 수가 가장 많은 군집의 이동방향이 된다. 합쳐지는 군집의 미생물 수가 같은 경우는

주어지지 않는다.

6. M 시간 동안 미생물 군집들을 격리하였다. M시간 후 남아 있는 미생물 수의 총합을 구하여라.


문제issue

1. 미생물이 동시에 이동 후 크기에 따라서 dir 결정

- 낚시왕 문제와 비슷한 방법으로 해결한다.


해결흐름

1. 미생물 정보(r, c, 미생물의 수, 이동 방향)을 list에 저장한다.

2. list에서 미생물을 꺼내서 이동한다.

3. 미생물 군집이 만나는 셀의 경우는 다음과 같다.

(1) 아무것도 없음

(2) 약품

(3) 다른 군집이 있음

4. list상에서 모든 움직임을 끝낸 후 미생물의 수를 나타내는 size[][] 와

미생물의 합 sum[][] , 이동 방향을 나타내는 dir[][]을 생성한다.

5. list에서 군집을 꺼내서 size와 dir에 넣어주고 경우에 따라 sum에 미생물 수 의 합을 넣어준다.

(1) 아무것도 없는 경우 그냥 넣는다. sum에는 누적을 해준다.

(2) 뭔가 있는 경우 size를 비교해서 지금 넣으려는게 클 경우에만

size와 dir를 갱신해준다. sum에는 누적을 해준다.

(3) list를 다 돌고 list를 다시 선언해준다. sum[][]과 dir[][]을 list에 다시 넣어준다.

6. M초가 끝난뒤 list에 있는 군집을 합해서 출력한다.


소스코드