본문 바로가기

반응형

알고리즘/SW Expert Academy

(22)
[SWEA 1798] 범준이의 제주도 여행계획 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV4x9oyaCR8DFAUx&categoryId=AV4x9oyaCR8DFAUx&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 이해하기 장소를 방문해서 만족도를 최대로 높이는 경우를 구하는 문제이다. 하루에 최대 9시간까지 사용할 수 있고 9시간 안에 호텔에 도착을 해야한다. 마지막 날이라면 9시간 내에 공항에 도착을 해야 한다. 그때의 최대 만족도와 경로를 구하는 문제이다. 모든 장소를 방문해 보는 완전탐색으로 푸는 문제이다. 2. 구..
[SWEA] 7699번 수지의 수지 맞는 여행 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWqUzj0arpkDFARG&categoryId=AWqUzj0arpkDFARG&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 이해하기 상하좌우로 이동이 가능하지만 같은 명물을 보지 않고 가장 많은 명물을 보는 방법을 찾는 것이다. dfs로 풀 수 있다. 2. 구현하기 dfs(x,y,depth) 현재 위치를 받고 얼마나 많은 명물을 봤는 지를 갱신해준다. 현재 위치의 명물은 본 것이므로 봤다고 표시를 해준다. 함수가 종료될 때는 다시 보..
[모의 SW 역량테스트] 5650. 핀볼 게임 [모의 SW 역량테스트] 핀볼 게임 1. 이해하기 게임판 위에서는 작은 핀볼 하나가 상, 하, 좌, 우 중 한 방향으로 움직인다. 핀볼은 블록이나 웜홀 또는 블랙홀을 만나지 않는 한 현재 방향을 유지하며 움직인다. 핀볼이 블록의 수평면이나 수직면을 만날 경우 방향을 바꿔 반대 방향으로 돌아오고, 경사면을 만날 경우에는 직각으로 진행 방향이 꺾이게 된다. 핀볼은 벽을 만날 경우에도 반대 방향으로 돌아온다. 웜홀에 빠지면 동일한 숫자를 가진 다른 반대편 웜홀로 빠져 나오게 되며 진행방향은 그대로 유지된다. 핀볼이 블랙홀을 만나면, 핀볼이 사라지게 되어 게임은 끝난다. 게임은 핀볼이 출발 위치로 돌아오거나, 블랙홀에 빠질 때 끝나게 된다. 점수는 벽이나 블록에 부딪힌 횟수가 된다. 게임에서 얻을 수 있는 점수..
[모의 SW 역량테스트] 5648. 원자 소멸 시뮬레이션 [모의 SW 역량테스트] 원자 소멸 시뮬레이션 1. 이해하기 원자들은 2차원 평면에서 이동하며 두 개 이상의 원자가 충돌할 경우 충돌한 원자들은 각자 보유한 에너지를 모두 방출하고 소멸된다. 원자는 각자 고유의 움직이는 방향을 가지고 있다. 모든 원자들의 이동속도는 동일하다. 즉, 1초에 1만큼의 거리를 이동한다. 원자들이 소멸되면서 방출하는 에너지의 총합을 구하는 문제. 시뮬레이션 문제. 2. 구현하기 원자들은 0.5초 후에도 만나면 충돌하여 에너지를 방출한다. 따라서 이동 구간을 2배로 늘려주면 된다. 원자들의 이동을 구현한다. 이때, 입력이 y,x로 주어지기 때문에 이동방향을 맞춰서 잘 구현해주어야 한다. bool out_of_bound(int x, int y) { return x < 0 or x ..
[모의 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시간 후 살아있는 줄기 세포(비활성+활성)의 총 개수를 구하는 문..