본문 바로가기

Algorithms/SW Expert Academy

(30)
[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 까지의 케이스..
[Java] SW Expert Academy 1926번 문제: 간단한 369게임 (Brute Force) --- 문제 --- 1926. 간단한 369게임 --- 코드 --- import java.util.Scanner; public class Sw1926 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); for(int i=1; i

728x90
반응형