[SWEA] 2382. 미생물 격리 (시뮬레이션/Java)
·
코딩 테스트/SWEA
[SWEA] 2382. 미생물 격리 📌 풀이 과정미생물 군집의 정보를 입력받아 저장해야 하는데미생물 수가 큰 순서대로 정렬하도록 PriorityQueue를 사용한다.우선순위 큐를 사용하면서 두 개 이상의 군집이 한 셀에 모이는 경우는 미생물 수를 합치는 로직만 구현해주면 된다. 1. 매 시간마다 이동 후의 군집 상태를 저장하기 위해 map 배열을 초기화 한다.2. 각 미생물 군집을 꺼내서 현재 방향에 맞게 이동한다.3. 이동 후 군집 상태를 다시 우선순위 큐에 넣는다.이동 후, 격자의 경계에 도달하면 미생물 수를 절반으로 줄이고 이동 방향을 반대로 바꿉니다.이동한 위치에 다른 군집이 존재하면 미생물 수를 합칩니다.4. 이동 후의 군집 상태를 다시 우선순위 큐에 넣는다.  ✨ 제출 코드import jav..
[SWEA] 8275. 햄스터 (백트래킹/Java)
·
코딩 테스트/SWEA
[SWEA] 8275. 햄스터 📌 풀이 과정1. 각 우리에 0부터 X마리까지 가능한 햄스터 수를 배치하기 위해 중복 순열을 생성한다.2. (idx == N)이 되면 해당 순열이 경근이가 기록한 햄스터의 수에 모두 만족하는지 확인한다.3. 조건을 모두 만족하면 현재 배치된 총 햄스터 수를 계산해, 기존 최대 햄스터 수를 갱신한다.    조건을 하나라도 만족하지 못하는 경우 탐색을 종료하고, 다음 순열로 넘어간다. ✨ 제출 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public clas..
[SWEA] 1824. 혁진이의 프로그램 검증 (시뮬레이션/Java)
·
코딩 테스트/SWEA
[SWEA] 1824. 혁진이의 프로그램 검증📌 풀이 과정단순한 시뮬레이션 문제인줄 알았는데 무려 4차원 방문 배열이 필요한 문제였다.dfs 재귀로 계속 탐색하니 StackOverflow 가 떠서 골치가 아픈 문제다. 이동 방향에 따른 인덱스 관리하기문제에서는 이동 방향이 2차원 격자의 크기를 벗어날 경우 반대편에 있는 위치로 이동해야 한다.이때 모듈러 연산을 통해 인덱스 관리를 해야한다.우리가 일반적으로 사용하는 (index + 1) % size 방식은 음수 인덱스를 처리할 수 없으니index = (index - 1 + size) % size위 방식으로 음수 인덱스를 방지하여 순환할 수 있도록 한다. 4차원 방문배열이 왜 필요하지?이 문제의 목적은 혁진이는 자신이 작성한 프로그램이 결국에는 멈출 수 ..
[SWEA] 8382. 방향 전환 (BFS/Java)
·
코딩 테스트/SWEA
[SWEA] 8382. 방향 전환 📌 풀이 과정이 문제는 규칙을 찾아서 수식으로 쉽게 풀 수 있다. 하지만 그래프 탐색을 연습해야 하기에 BFS로 풀게되었다. (x1, y1 )에서 (x2, y2)로 이동을 하는데 가장 첫 이동은 어떤 이동이어도 상관 없다.이전 이동이 가로 이동이었다면, 이번에는 세로 이동으로 이동하고, 이전 이동이 세로 이동이었다면,이번에는 가로 이동으로 이동하여 (x1, y1)에서 (x2, y2)로 이동해야 한다.여기서 최소 몇 번의 이동을 해야 도착할 수 있는지 구현을 해야 한다.가로와 세로 방향으로 번갈아 이동해야 하는 조건으로 인해 방향에 따른 방문 체크가 필요하다.즉, 같은 위치라도 직전에 가로로 이동했는지, 세로로 이동했는지에 따라그 다음 이동이 달라지기 때문에 방향 정보를..
[SWEA] 10966. 물놀이를 가자 (BFS/Java)
·
코딩 테스트/SWEA
[SWEA] 10966. 물놀이를 가자 📌 문제 풀이각 땅(L)에서 가장 가까운 물(W)까지의 최소 거리를 구하고, 그 거리들의 합을 계산해야 한다.처음에 문제에서 적힌 것 처럼 땅에서 출발해서 물에 도착하는 경우 그 거리를 누적하게 했는데 시간 초과가 떴다. 문제에선 물(W)의 개수가 최소 1개 이상 주어진다고 했지만,예외적으로 최악의 상황을 생각해보자!! 만약 물(W)이 아예 없다면, 땅(L) 위치에서 각각 BFS를 수행해도 물에 도착할 수 없게된다.이 경우 모든 땅에 대해 개별적으로 BFS를 수행해야 하므로, 땅의 개수만큼 BFS가 실행되어연산량이 크게 증가하고 최단 거리 계산이 불가능해진다.따라서 물(W)의 위치에서 출발해, 동시에 BFS를 수행하면서 땅(L)을 탐색하는 방식으로생각의 전환이 필..
[SWEA] 2115 벌꿀채취 (조합, 부분집합/Java)
·
코딩 테스트/SWEA
[SWEA] 2115 벌꿀채취📌 풀이 과정두 명의 일꾼이 최대 수익을 얻을 수 있도록 꿀을 채취하는 구간을 선택해야 한다.각 일꾼이 채취할 수 있는 벌통의 수와 꿀의 최대 양이 정해져있기 때문에, 이 조건을 잘 생각해야 한다.각 구간에서 선택할 수 있는 벌통의 부분 집합 중에서 최대 수익을 미리 구해두면이후 두 일꾼이 벌통을 선택할 때 그 값을 재사용할 수 있기 때문에 최대 수익을 먼저 계산하도록 하자!!!아래 코드에서 profit 배열에 각 구간의 최대 수익을 미리 계산해두면두 일꾼이 벌통 구간을 선택할 때 해당 구간의 최대 수익만 참조하면 된다.1. 최대 수익 계산각 구간에서 얻을 수 있는 최대 수익을 계산해야 한다.일꾼이 꿀을 채취할 수 있는 모든 가능한 구간에 대해 최대 수익을 구한다.2. 두 ..
[SWEA] 5656. 벽돌 깨기 (시뮬레이션/Java)
·
코딩 테스트/SWEA
[SWEA] 5656. 벽돌 깨기 📌 풀이 과정1. 중복순열로 구슬 떨어뜨릴 위치 선택하기2. 구슬 떨어뜨리기3. 벽돌 파괴하기4. 빈칸 채우기 이 과정에 유의해서 차근차근 구현해 나가면 된다.구슬이 명중한 벽돌은 상하좌우로 (벽돌에 적힌 숫자 - 1)칸 만큼 같이 제거된다는 조건을 잊으면 안된다!! ✨ 제출 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Solution { static int N, W, H; static int totalOfBrick, count, result; static int[][]..
[SWEA] 1767. 프로세서 연결하기 (DFS/Java)
·
코딩 테스트/SWEA
[SWEA] 1767. 프로세서 연결하기 📌 풀이 과정최대한 많은 Core에 전원을 연결하였을 경우, 전선 길이의 합을 구해야 한다.단, 여러 방법이 있을 경우, 전선 길이의 합이 최소가 되는 값을 구하는 것이 문제 조건이다.가장자리에 위치한 core는 전선을 연결하지 않기에 전선 연결에서 고려하지 않아도 된다.따라서 가장자리에 있는 core는 코어 목록에서 제외해도 된다.✨ 제출 코드메모리 : 22,048 kb시간 : 196 msimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.uti..
[SWEA] 5644. 무선 충전 (시뮬레이션/Java)
·
코딩 테스트/SWEA
[SWEA] 5644. 무선 충전 📌 풀이 과정처음에는 BC의 범위를 관리하기 위해서 배열을 따로 두어야 하나? 고민을 했다.하지만, 이 문제에서 핵심은 특정 위치에서 어떤 BC가 사용 가능한지를 실시간으로 파악하는 것이기 때문에각 사용자가 이동할 때마다 현재 위치에서 연결 가능한 BC를 탐색하고그에 따른 최댓값을 완전 탐색으로 구하는 방식이 효율적이다.각 사용자는 이동할 때마다 현재 위치에서 접근 가능한 BC를 탐색한다.두 사용자가 동시에 접속 가능한 BC 목록을 완탐으로 최대 충전량을 정한다.같은 BC에 접속할 경우해당 BC의 성능을 한번만 더한다 → 균등하게 분배서로 다른 BC에 접속할 경우각 사용자의 충전량을 더해 최대 충전량을 계산한다. ✨ 제출 코드import java.io.BufferedR..
[SWEA] 5653. 줄기세포배양 (구현/Java)
·
코딩 테스트/SWEA
[SWEA] 5653. 줄기세포배양 📌 문제 과정◾ 문제 조건세포는 생명력 수치에 따라 일정 시간이 지나면 활성화되고, 그 후 상하좌우로 번식한다.두 개 이상의 세포가 같은 위치로 번식하려고 하면 생명력이 높은 세포만 번식에 성공한다.시간 경과에 따라 세포는 비활성화 → 활성화 → 죽음의 과정을 거친다.생명력 수치가 X인 줄기 세포의 경우X시간 동안 비활성 상태이고 X시간이 지나는 순간 활성 상태가 된다.줄기 세포가 활성 상태가 되면 X시간 동안 살아있을 수 있으며 X시간이 지나면 세포는 죽게 된다.이 조건을 제대로 안봐서 조큼 삽질한... ◾ 맵 크기 초기화세포가 K 시간 동안 번식하며 범위가 확장되기 때문에배양 시간에 따라 충분한 공간을 확보하기 위해 맵의 크기를 N + 2 * K 로 설정한다. ◾..