본문 바로가기

반응형

알고리즘

(136)
[모의 SW 역량테스트] 5653. 줄기세포배양 [모의 SW 역량테스트] 줄기세포배양 1. 이해하기 각 줄기 세포는 생명력이라는 수치를 가지고 있다. 초기 상태에서 줄기 세포들은 비활성 상태이며 생명력 수치가 X인 줄기 세포의 경우 X시간 동안 비활성 상태이고 X시간이 지나는 순간 활성 상태가 된다. 줄기 세포가 활성 상태가 되면 X시간 동안 살아있을 수 있으며 X시간이 지나면 세포는 죽게 된다. 세포가 죽더라도 소멸되는 것은 아니다. 활성화된 줄기 세포는 첫 1시간 동안 상, 하, 좌, 우 네 방향으로 동시에 번식 한다. 번식된 줄기 세포는 비활성 상태이다. 두 개 이상의 줄기 세포가 하나의 그리드 셀에 동시 번식하려고 하는 경우 생명력 수치가 높은 줄기 세포가 해당 셀을 차지한다. K시간 후 살아있는 줄기 세포(비활성+활성)의 총 개수를 구하는 문..
[모의 SW 역량테스트] 4008. 숫자 만들기 [모의 SW 역량테스트] 숫자 만들기 1. 이해하기 N개의 숫자가 적혀 있는 게임 판이 있고, +,-,*,/ 의 연산자 카드를 숫자 사이에 끼워 넣어 다양한 결과 값을 구한다. 연산자의 우선 순위는 고려하지 않고 왼쪽에서 오른쪽으로 차례대로 계산한다. 연산자 카드를 사용하여 수식을 계산했을 때, 그 결과가 최대가 되는 수식과 최소가 되는 수식을 찾고, 두 값의 차이를 구하는 문제. 완전탐색 문제. 2. 구현하기 숫자 사이에 모든 연산자를 넣어보며 그 때의 최솟값과 최댓값을 구한다. 연산자는 주어진 갯수만 사용할 수 있으므로 그 이상을 사용한다면 적절한 값을 리턴해준다. void set_min_max_val(const RET t, int& min_val, int& max_val) { min_val = mi..
[모의 SW 역량테스트] 4012. 요리사 [모의 SW 역량테스트] 요리사 1. 이해하기 N개의 식재료가 있고 식재료들을 각각 N/2개씩 나누어 두 개의 요리를 하려고 한다.(N은 짝수) 비슷한 맛의 음식을 만들기 위해서는 맛의 차이가 최소가 되도록 재료를 배분해야 한다. 식재료 i는 j와 같이 요리하게 되면 궁합이 잘 맞아 시너지 Sij가 발생한다. 각 음식의 맛은 음식을 구성하는 식재료들로부터 발생하는 시너지 Sij들의 합이다. 두 음식 간의 맛의 차이가 최소가 되는 경우를 찾고 그 최솟값을 정답으로 출력하는 문제. 완전탐색 문제. 2. 구현하기 N/2개를 선택했을 때, 각 시너지들의 합을 구한다. int get_synergy(bool flag) { int ret = 0; for(int i = 0; i < N; i++) { for(int j ..
[모의 SW 역량테스트] 4013. 특이한 자석 [모의 SW 역량테스트] 특이한 자석 1. 이해하기 4개의 자석이 있고, 각 자석은 8개의 날을 가지고 있다. 자석의 각 날 마다 N극 또는 S극의 자성을 가지고 있다. 하나의 자석이 1 칸 회전될 때, 붙어 있는 자석은 서로 붙어 있는 날의 자성과 다를 경우에만 인력에 의해 반대 방향으로 1칸 회전된다. 모든 회전이 끝난 후, 아래와 같은 방법으로 점수를 계산한다. 1 번 자석에서 빨간색 화살표 위치에 있는 날의 자성이 N 극이면 0점, S 극이면 1점을 획득한다. 2 번 자석에서 빨간색 화살표 위치에 있는 날의 자성이 N 극이면 0점, S 극이면 2점을 획득한다. 3 번 자석에서 빨간색 화살표 위치에 있는 날의 자성이 N 극이면 0점, S 극이면 4점을 획득한다. 4 번 자석에서 빨간색 화살표 위치에..
[모의 SW 역량테스트] 4014. 활주로 건설 [모의 SW 역량테스트] 활주로 건설 1. 이해하기 활주로는 높이가 동일한 구간에서 건설이 가능하다. 높이가 다른 구간의 경우 활주로가 끊어지기 때문에 길이가 X이고, 높이가 1인 경사로를 설치해야만 한다. 경사로는 경사로의 길이만큼 활주로의 높이가 같아야 설치가 가능하다. 동일한 위치에 두 개 이상의 경사로를 겹쳐서 사용할 수 없다. 경사로는 세워서 사용할 수 없다. 2. 구현하기 각 활주로마다 경사로를 설치할 수 있는지 확인한다. 활주로에 경사로가 설치가 이미 되어있는지 확인. 경사로의 길이만큼 활주로의 높이가 같은지 확인. bool is_installed(bool install[20], int st, int en) { for(int i = st; i = N) { flag = false; break;..
[모의 SW 역량테스트] 2117. 홈 방범 서비스 [모의 SW 역량테스트] 홈 방범 서비스 1. 이해하기 홈방법 서비스를 제공하기 위해서는 운영 비용이 필요하다. 운영 비용 = (K*K) + (K-1) * (K-1) 홈방범 서비스를 제공받는 집들은 각각 M의 비용을 지불할 수 있다. 보안회사에서는 손해를 보지 않는 한 최대한 많은 집에 홈방법 서비스를 제공하려고 한다. 손해를 보지 않는 다는 말은 이익이 0이어도 제공한다는 뜻이다. 홈방법 서비스를 제공 받는 집들의 수를 출력하는 문제. 완전탐색 문제. 2. 구현하기 서비스를 제공하는 크기가 K일 때, 운영 비용을 구한다. int get_oper_cost(int k) { return (k*k)+((k-1)*(k-1)); } 홈방범 서비스를 제공하는 시작 지점과 집과의 거리를 구해, 제공할 수 있는 집인지..
[모의 SW 역량테스트] 2112. 보호 필름 [모의 SW 역량테스트] 보호 필름 1. 이해하기 보호 필름의 셀들은 각 특성을 갖는다. 단면의 모든 세로방향에 대해서 동일한 특성의 셀들이 K개 이상 연속적으로 있는 경우에만 성능검사를 통과하게 된다. 성능 검사에 통과하기 위해서 약품을 사용한다. 약품은 막 별로 투입할 수 있으며 이 경우 투입하는 막의 모든 셀들은 하나의 특성으로 변경된다. 약품 투입 횟수를 최소로 하여 성능검사를 통과할 수 있는 방법을 찾는 문제. 2. 구현하기 보호 필름이 성능검사를 통과했는지 알아본다. bool is_passed() { for(int i = 0; i < W; i++) { bool flag = false; int cnt = 1; for(int j = 0; j < D-1; j++) { if(film[j][i] == ..
[모의 SW 역량테스트] 2115. 벌꿀채취 [모의 SW 역량테스트] 벌꿀채취 1. 이해하기 벌통에 있는 꿀을 두 명의 일꾼이 채취한다. 일꾼은 꿀을 채취할 수 있는 벌통의 수 M이 주어질 때, 각각의 일꾼은 가로로 연속되도록 M개의 벌통을 선택하고 선택한 벌통에서 꿀을 채취할 수 있다. 각 일꾼이 선택한 벌통이 겹치면 안 된다. 두 명의 일꾼은 선택한 벌통에서 꿀을 채취하여 용기에 담아야 한다. 이 때, 용기는 각각의 일꾼이 하나씩 가지고 있는 것이다. 벌통에 채취할 수 있는 꿀의 최대 양은 C이다. 최대 C보다 더 많이 채울 수 없다. 두 일꾼이 꿀을 채취하여 얻을 수 있는 수익의 합이 최대가 되는 경우를 찾는 문제. 채취가능한 모든 경우를 해보는 완전탐색 문제. 2. 구현하기 벌통에 있는 꿀을 두 명의 일꾼이 채취한다. 각 일꾼들이 채취한 꿀..