본문 바로가기

■ 알고리즘 문제 풀이/SWEA

(15)
[SWEA] 5658. 보물상자 비밀번호 ▶문제설명[SWEA] 5658. 보물상자 비밀번호 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo&categoryId=AWXRUN9KfZ8DFAUo&categoryType=CODE ▶Hint 브루트포스 & 시뮬레이션 문제이다. 사각형의 각 변에 적힌 16진수들을 시계방향으로 회전시키기 위해서 Queue 자료구조를 사용하는 것이 적합하다. 하지만 Queue는 저장된 데이터에 인덱스로 접근하는 것이 불가능하다. 그래서 Deque 자료구조를 활용한다. 1. 16진수들을 Deque에 모두 push_back한다. 2. 4개의 변에 있는 16진수를 각각 10진수로 변환하여 list에 저장한다.[변..
[SWEA-D3] 1244. 최대 상금 ▶문제설명[SWEA] 1244. 최대 상금 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15Khn6AN0CFAYD ▶HintDFS & 브루트 포스 문제이다. 2중 for문으로 숫자를 교환하는 모든 경우에 대해 DFS를 수행한다. 재귀 호출 시 현재 교환 횟수+1을 인자로 넘겨준다. 단, 불필요한 연산을 줄이기 위해서 같은 교환 횟수로 이전과 같은 상금이 나온 적이 있는 경우에는 중복되므로 재귀 호출을 하지 않도록 한다. bool visited[상금][교환 횟수] 배열을 만들어 관리하면 중복되는 연산을 막을 수 있다. ▶Solution
[SWEA] 2112. 보호 필름 ▶문제설명[SWEA] 2112. 보호 필름 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu&categoryId=AV5V1SYKAaUDFAWu&categoryType=CODE ▶HintDFS 문제이다. 아래와 같이 3번의 재귀 호출로 모든 경우를 탐색할 수 있다. 현재 필름의 상태를 저장한다. 1. 약품을 주입하지 않고 다음 필름의 인덱스와 현재 약품 주입 횟수를 인자로 하여 함수를 재귀적으로 호출한다. 2. 현재 필름에 A약품을 주입하고 다음 필름의 인덱스와 현재 약품 주입 횟수+1을 인자로 하여 함수를 재귀적으로 호출한다. 3. 현재 필름에 B약품을 주입하고 다음 필름의 인덱스..
[SWEA] 1868. 파핑파핑 지뢰찾기 ▶문제설명[SWEA] 1868. 파핑파핑 지뢰찾기 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LwsHaD1MDFAXc&categoryId=AV5LwsHaD1MDFAXc&categoryType=CODE ▶Hint지뢰가 없는 위치에 상/하/좌/우/대각선 8방향에 존재하는 지뢰의 개수를 먼저 구한 뒤 지뢰 개수가 0개인 위치를 먼저 click해서 연쇄적으로 터뜨린 후 나머지를 click해서 해결하면 된다. ▶Solution
[SWEA] 5644. 무선 충전 ▶문제설명[SWEA] 5644. 무선 충전 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo ▶Hint각 BC의 충전 가능 영역을 3차원 배열로 저장한다. 그러면 사용자 A와 B가 현재 위치에서 접속할 수 있는 BC를 모두 체크할 수 있다. 사용자 A와 B를 1초에 한칸씩 이동시키고, 매 초마다 현재 위치에서 접속할 수 있는 BC를 모두 체크하면서 (완전 탐색) 가장 큰 충전량 누적 값을 찾으면 된다. A와 B가 같은 BC의 영역에 속하는 경우 충전량을 반으로 나누어 가지게 된다는 점을 주의해야 한다. ▶Solution
[SWEA] 4014. 활주로 건설 ▶문제설명[SWEA] 4014. 활주로 건설https://www.swexpertacademy.com/main/code/problem/problemSubmitHistory.do?contestProbId=AWIeW7FakkUDFAVH ▶Hint땅의 높이들이 주어진다.땅의 높이 차가 1인 경우에 경사로를 놓아 활주로를 연결할 수 있다. 경사로의 높이는 항상 1이며, 세로로 세울 수 없다. 단, 경사로의 길이 X가 주어지는데활주로를 만드는 과정에서경사로가 길어서 놓을 공간이 부족한 경우,경사로가 겹쳐지게 놓이는 경우는 허용하지 않는다. 가로, 세로로 완성될 수 있는 활주로 라인의 개수를 구하는 문제다. 내리막길과 오르막길로 나누어서 생각하고내리막길일때 경사로를 놓는 경우 그 위치를 체크해두고,오르막길일때 경사로..
[SWEA] 6808. 규영이와 인영이의 카드게임 ▶문제설명[SWEA] 6808. 규영이와 인영이의 카드게임https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWgv9va6HnkDFAW0 ▶Hint1부터 18까지의 숫자로 이루어진 카드가 있을 때,규영이가 9장, 인영이도 9장으로 나눠 가지고 간단한 카드 게임을 한다. [게임 규칙]각자 가지고 있는 카드들 중 하나를 뽑아서 낸다.카드의 번호가 더 큰 사람이 승리하며, 승리자는 제출한 카드 두 장의 합을 점수로 얻는다. 규영이는 카드를 받은 순서대로 제출하는 것으로 고정한다.인영이는 9!의 모든 경우의 수로 카드를 제출할 수 있다. 이 게임에서 규영이가 승리하는 경우의 수와, 지는 경우의 수를 계산하여 출력해야한..
[SWEA] 5653. 줄기세포배양 ▶문제설명[SWEA] 5653. 줄기세포배양https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRJ8EKe48DFAUo&categoryId=AWXRJ8EKe48DFAUo&categoryType=CODE ▶Hint입력으로 주어지는 K의 최대값이 300이므로세포의 생명력이 모두 1이라고 가정했을 때 상하좌우 최대 150개씩 번식해 나갈 수 있다. 입력으로 주어지는 세포의 정보를 저장할 2차원 배열을 하나 만들고좌표의 시작값을 한 가운데로 하여 세포의 생명력 값을 입력받는다. [각 세포가 가지는 정보]1. 비활성/활성/죽음을 나타내는 상태 정보2. 생명력3. 좌표4. 번식의 여부5. 상태가 변화할 다음 시간에 대..