본문 바로가기

SWEA/삼성SW역량테스트 C++

[SWEA] 미생물 격리

[문제]

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

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

[풀이]

 

제출일 : 2019-08-01 15:29

  • C++언어
  • 12,684 kb메모리
  • 879 ms실행시간
  • 2,802코드길이
  • Pass결과

   ① 최초 각 미생물 군집의 위치와 군집 내 미생물의 수, 이동 방향이 주어진다. 약품이 칠해진 부분에는 미생물이 배치되어 있지 않다. 이동방향은 상, 하, 좌, 우 네 방향 중 하나이다.

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

   ③ 미생물 군집이 이동 후 약품이 칠해진 셀에 도착하면 군집 내 미생물의 절반이 죽고, 이동방향이 반대로 바뀐다. 
       미생물 수가 홀수인 경우 반으로 나누어 떨어지지 않으므로, 다음과 같이 정의한다.
       살아남은 미생물 수 = 원래 미생물 수를 2로 나눈 후 소수점 이하를 버림 한 값
       따라서 군집에 미생물이 한 마리 있는 경우 살아남은 미생물 수가 0이 되기 때문에, 군집이 사라지게 된다,

   ④ 이동 후 두 개 이상의 군집이 한 셀에 모이는 경우 군집들이 합쳐지게 된다. 
       합쳐 진 군집의 미생물 수는 군집들의 미생물 수의 합이며, 이동 방향은 군집들 중 미생물 수가 가장 많은 군집의 이동방향이 된다. 
       합쳐지는 군집의 미생물 수가 같은 경우는 주어지지 않으므로 고려하지 않아도 된다.
     

* 구하는 값 : M시간 후 남아 있는 미생물 수의 총합을 구하여라.

 

* disable[1001] =  bool 배열을 사용해서 k 개의 미생물 군집들 중 이미 합쳐진 미생물들은 과정에서 배제한다. (true가 되면 어떤 연산도 적용되지 않도록)

 

* check() -> 파라미터로 받은 좌표에 다수의 미생물 군집이 있는 경우 미생물들의 수는 합쳐지고 가장 미생물을 많이 가지고 있는 군집을 제외하고는 모두 사라진다. 

 

* moveGrups() -> 미생물들을 각 방향에 맞게 움직인다. 

 

* 결과값 : disable[i] 가 false 인 경우 합쳐지지 않고 남아있는 미생물 군집이기 때문에 이 군집들의 미생물 수를 더하면 정답이 된다. 

 


 

'SWEA > 삼성SW역량테스트 C++' 카테고리의 다른 글

[SWEA] 점심식사시간  (0) 2019.09.11
[SWEA] 활주로 건설  (0) 2019.08.02
[SWEA] 보호필름  (0) 2019.08.01
[SWEA] 줄기세포배양  (0) 2019.07.31
[SWEA] 핀볼게임  (0) 2019.07.31