본문 바로가기

Algorithms

(98)
[Java] 백준 알고리즘 13460번 문제 : 삼성 SW 역량 테스트 기출 문제 - 구슬 탈출2 (BFS, 너비 우선 탐색) --- 문제 --- --- 코드 --- 두 공을 동시에 같은 방향으로 움직이면서, 그 때 그 때의 상황을 체크해주어야 하므로 BFS 방식을 사용해야 했습니다. (DFS 로 해보려고 했다가 아주 생고생을 했습니다 . // ) 해당 문제의 특이점은 다음과 같습니다. 한번 보드를 기울이면 공이 벽까지 굴러간다. 제가 이부분을 이해 못해서 시간을 다 날렸습니다 ... 보드를 기울였을 때 신의 능력이 있어서 한칸만 구슬을 움직이고 멈출 수 있는 것이 아니었습니다. 무조건 벽이나 구멍이나 다른 구슬이 있을 때까지 굴러가야 합니다. 방문이력을 빨간 구슬과 파란 구슬을 함께 검사해야 한다. 전체적으로 보드를 봤을 때, 빨간 구슬과 파란 구슬 둘의 위치가 똑같이 반복되는 상황이 있으면 결국 그 뒤부터는 똑같은 상황이 반..
[Java] SW Expert Academy 2112번 문제: [모의 SW 역량테스트] 보호 필름 (DFS, 깊이 우선 탐색) --- 문제 --- 2112. [모의 SW 역량테스트] 보호 필름 --- 코드 --- 이 경우는 다차원 배열의 깊은 복사 법을 알면 더 빠르게 풀 수 있는 문제였습니다. 얕은 복사는 기존의 원래의 배열의 값도 같이 변경되기 때문에 제대로된 계산이 어렵기 때문입니다. 저는 2차원 배열의 깊은 복사로 다음과 같은 방법을 사용했습니다. // 3-1-1. 기존 단면 복사 int[][] copy =new int[D][W]; for(int r=0; r
[Java] SW Expert Academy 2105번 문제: [모의 SW 역량테스트] 디저트 카페 (DFS, 깊이 우선 탐색) --- 문제 --- 2105. [모의 SW 역량테스트] 디저트 카페 --- 코드 --- 해당 문제는 DFS 를 사용하면 되는 문제 입니다. 대신 특이사항이 몇가지 있습니다. 사각형은 무조건 한가지 방향 흐름으로 그려낼 수 있다는 점 시작점에서 갈 수 있는 모든 방향을 dfs 로 하는 것이 아니라 처음에는 무조건 시작점에서 하우(오른쪽아래)방향으로 움직이고, 그 다음 방향은 하좌 -> 상좌 -> 상우 로 움직이면 되는 것 입니다. 이 점만 잘 파악했다면 쉽게 풀어질 수 있는 문제였습니다. (처음에 저는 시작점에서 가능한 모든 대각선 방향으로 움직이게 코드를 작성했다가 처리 시간이 엄청 오래걸리게 되었습니다.) 카페 투어 중에 중복되는 디저트 값이 있으면 안되는 것 이것은 Set 자료구조를 이용해서 풀면 됩..
[Java] SW Expert Academy 1953번 문제: [모의 SW 역량테스트] 탈주범 검거 (BFS, 너비 우선 탐색) --- 문제 --- 1953. [모의 SW 역량테스트] 탈주범 검거 --- 코드 --- 가능한 도보의 갯수의 범위를 1칸씩 늘려가며 체크하는 BFS 문제 인데, 특수하게 고려할 것이 많은 문제이다. 고려할 것은 이전에 방문했던 것은 다시 방문할 필요가 없는 것 시간 L을 넘지 않기 위해 같은 시간에 방문하는 위치의 갯수(cand->turn)를 저장시켰다가 그 만큼 확인후에(turn==0) 시간을 다음 시간으로(++hour) 변경해야하는 것 위로 움직였을 때 못 가는 터널이 있고(아래 방향으로 뚫리지 않은 터널이 있는 경우), 아래로 움직였을 때 못가는 터널이 있고 좌,우도 똑같이 못가는 터널을 고려해주어야 하는 것 이 3가지 고려 점들이 문제를 더욱 어렵게 만들어 주었습니다. 제가 푼 풀이는 다음과 같습..
[Java] SW Expert Academy 1949번 문제: [모의 SW 역량테스트] 등산로 조성 (DFS, 깊이 우선 탐색) --- 문제 --- 1949. [모의 SW 역량테스트] 등산로 조성 --- 코드 --- 최초로 이전 높이보다 높거나 같은 높이가 나왔을 때, K를 사용하면 되는데 현재의 높이에서 K 높이를 삭제하면 무조건 이전 높이보다 작아질수만 있다면야 K 를 1~K 부터 다 써볼 필요 없이 이전의 높이보다 1작게 봉우리를 파는 걸로 사용하면 됩니다. import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Sw1949 { public st..
[Java] SW Expert Academy 1220번 문제: [S/W 문제해결 기본] 5일차 - Magnetic (Greedy) --- 문제 --- 1220. [S/W 문제해결 기본] 5일차 - Magnetic --- 코드 --- 한 열(세로)에서 전에 1나오고 다음 2가 나오는 구간이 몇개인지를 세면 되는 문제였습니다. import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class Sw1220 { public static void main(String[] args) throws FileNotFoundException { System.setIn(new FileInputStream("./src/1220.txt")); Scanner sc = new Scanner(System.in); int T; T=10..
[Java] SW Expert Academy 1228번 문제: [S/W 문제해결 기본] 8일차 - 암호문1 (LinkedList) --- 문제 --- 1228. [S/W 문제해결 기본] 8일차 - 암호문1 --- 코드 --- import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.LinkedList; import java.util.Scanner; public class Sw1228 { public static void main(String[] args) throws FileNotFoundException { System.setIn(new FileInputStream("./src/1228.txt")); Scanner sc = new Scanner(System.in); int T; T=10; for(int test_case = 1; te..
[Java] SW Expert Academy 2383번 문제: [모의 SW 역량테스트] 점심 식사시간 (DFS, 깊이 우선 탐색, 중복 순열) --- 문제 --- 2383. [모의 SW 역량테스트] 점심 식사시간 --- 코드 --- 평소 자주 Recursive function (재귀 함수) 방식으로 풀던 DFS와 달리 해당 문제는 중복 순열과 bit operation을 통해서 문제를 풀어주면 더욱 효율적인 문제였습니다. 예를 들어, 사람이 6명일 때 계단 1을 지나가는 사람을 1로 표시하고 계단 2를 지나가는 사람을 0으로 표시하는 것 입니다. 즉, 6명이 모두 계단 1을 지나간다고 하면 111111 (2) = 63 (10) 6명이 모두 계단 2를 지나간다고 하면 000000 (2) = 0 (10) 로 나타낼 수 있고, 이렇게 십진수로 0 ~ 63 (2^6 - 1) 까지의 64개의 케이스를 모두 만들 수 있습니다. 그래서 0~63 까지의 케이스..

728x90
반응형