본문 바로가기

반응형

전체 글

(168)
[모의 SW 역량테스트] 5644. 무선 충전 [모의 SW 역량테스트] 무선 충전 1. 이해하기 BC의 충전 범위가 C일 때, BC와 거리가 C 이하이면 BC에 접속할 수 있다. 거리 = |Xa-Xb|+|Ya-Yb| 매초마다 특정 BC의 충전 범위 안에 들어오면 해당 BC에 접속이 가능하다. 만약 한 BC에 두 명의 사용자가 접속한 경우, 접속한 사용자의 수만큼 충전 양을 균등하게 분배한다. 모든 사용자가 충전한 양의 합의 최댓값을 구하는 문제. 시뮬레이션+완전 탐색 문제. 2. 구현하기 각 사용자를 움직인다. void move(int& x, int& y, int d) { x+=dx[d]; y+=dy[d]; } 사용자가 모든 BC에 접속이 가능한지 보고, 그때 최대의 충전합을 구한다. int get_dist(int x, int y, int i) { ..
[모의 SW 역량테스트] 5658. 보물상자 비밀번호 [모의 SW 역량테스트] 보물상자 비밀번호 1. 이해하기 보물 상자의 뚜껑은 시계방향으로 돌릴 수 있다. 보물 상자에는 자물쇠가 걸려있는데, 이 자물쇠의 비밀번호는 보물 상자에 적힌 숫자로 만들 수 있는 모든 수 중, K번쨰로 큰 수를 10진수로 만든 수이다. N개의 숫자가 입력으로 주어졌을 때, 보물상자의 비밀번호를 출력하는 문제. 크기 순서를 셀 때 같은 수를 중복으로 세지 않는다. 모든 경우에 나오는 수를 만들어보는 완전탐색문제. 2. 구현하기 보물 상자에 있는 자물쇠를 시계방향으로 돌리는 경우. void rotate() { int len = password.size(); char c = password[len-1]; for(int i = len-1; i >= 0; i--) { password[i]..
[모의 SW 역량테스트] 5656. 벽돌 깨기 [모의 SW 역량테스트] 벽돌 깨기 1. 이해하기 구슬은 N번만 쏠 수 있다. 게임의 규칙은 다음과 같다. 구슬은 좌, 우로만 움직일 수 있어서 항상 맨 위에 있는 벽돌만 깨트릴 수 있다. 벽돌은 숫자 1~9로 표현되며, 구슬이 명중한 벽돌은 상하좌우로 (벽돌에 적힌 숫자-1) 칸 만큼 같이 제거된다. 제거되는 범위 내에 있는 벽돌은 동시에 제거된다. 빈 공간이 있을 경우 벽돌은 밑으로 떨어지게 된다. N 개의 벽돌을 떨어트려 최대한 많은 벽돌을 제거할 때, 남은 벽돌의 갯수를 구하는 문제. 완전탐색 + 시뮬레이션 문제. 2. 구현하기 구슬이 떨어진 위치에 대한 정보를 줬을 때, 벽돌을 깨트린다. 상하좌우로 (벽돌에 적힌 숫자-1) 칸 만큼 같이 제거한다. void break_brick(vector& m..
[모의 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;..