[Programmers] Level2 조이스틱
2021. 3. 5. 01:10
알고리즘/Programmers
구해야 하는 것 : 조이스틱 조작 횟수의 최솟값 문제 핵심 요약 : 위아래 이동 미리 계산해서 더하기 + 좌우 비교해서 가까운 곳 더하기 1. answer에 상하 이동 횟수를 미리 저장한다. 2. A가 아닌 알파벳의 개수를 저장하여 반복문을 돌린다. (A가 아닌 알파벳의 개수가 0이 될 때까지) 3. 좌우 이동 횟수를 각각 계산하여 이동 횟수와 index를 저장한다. 4. 3에서 구한 index에 해당하는 문자를 A로 바꿔주고 answer에 이동 횟수를 저장해 준다. public class PM_L2_조이스틱 { public int solution(String name) { int answer = 0; int N = name.length(); int cntA = N; // A가 아닌 알파벳의 개수 cha..
[Programmers] Level3 네트워크
2021. 3. 4. 01:40
알고리즘/Programmers
구해야 하는 것 : 네트워크의 개수 문제 핵심 요약 : 방문한 노드를 기억하면서 네트워크를 만들어주면 된다 + 반복문 재귀 1. 노드를 방문하면 true로 체크 2. 나와 같은 네트워크 상에 있는 노드가 존재하고 방문하지 않았다면 재귀 Main 1. 만약 노드를 방문하지 않았다면 재귀 시작! 2. 재귀가 끝나고나면 answer 증가 public class PM_L3_네트워크 { static boolean[] check = new boolean[200]; // 노드 방문했는지 체크 public int solution(int n, int[][] computers) { int answer = 0; for (int i = 0; i < n; i++) { // 전체 노드 반복 if (check[i]) // 만약 노..
[Programmers] Level2 타켓 넘버
2021. 3. 4. 01:38
알고리즘/Programmers
구해야 하는 것 : 타겟 넘버를 만드는 방법의 수 문제 핵심 요약 : 더하고 빼고의 합을 기억해서 target과 비교해서 answer 증가 기저조건 1-1. numbers의 끝까지 방문했다면 -> 1-2 1-2. 만약 sum이 target과 같다면 answer 증가 1-3. return 재귀 1. number를 더해서 2. number를 빼서 public class PM_L2_타켓_넘버 { int answer = 0; public int solution(int[] numbers, int target) { dfs(numbers, target, 0, 0); // sum :0 cnt : 0으로 시작 return answer; } private void dfs(int[] numbers, int target, i..
[Programmers] Level3 단속카메라
2021. 3. 4. 01:27
알고리즘/Programmers
구해야 하는 것 : 단속 카메라의 개수 문제 핵심 요약 : 범위를 줄여가면서, 범위가 존재하지 않게 될 때 단속카메라 수를 증가 결국 범위가 겹치는 차량은 단속카메라가 하나만 필요하기 때문에 범위를 줄여주는 방법으로 접근했다! 1. 진입 지점순으로 정렬 2. 진입 지점이 가장 작은 차량의 진입,진출 지점을 저장 3. 반복 3-1. 다음 차량의 진입 지점과 2.를 비교하여 더 큰 진입 지점을 tmp에 저장 3-2. 다음 차량의 진출 지점과 2.를 비교하여 더 작은 진출 지점을 tmp에 저장 위 두 과정은 범위를 줄여주는 과정 3-3. 만약 범위가 존재한다면 두 지점을 swap! 3-4. 만약 범위가 존재하지 않는다면 다음 진입,진출 지점을 가지고 다시 시작 reset! 그렇다는건 단속카메라가 하나 더 필요..
[Programmers] Level3 섬 연결하기
2021. 3. 4. 01:25
알고리즘/Programmers
구해야 하는 것 : 최소 신장 트리 -> 최단 거리 구하기 문제 핵심 요약 : 크루스칼 알고리즘의 정석적인 문제 *** 혹시 저의 풀이법을 보고 있으시다면!! *** 저의 허접한 설명보다는 "나동빈님의 크루스칼 알고리즘" 설명을 보시는 것을 추천드립니다! 그 설명 그대로 코딩한 결과입니다 저도 다시 한번 공부했습니다,, import java.util.Arrays; public class PM_L3_섬_연결하기 { static int[] node; // union-find public static int find(int position) { // 자신의 노드가 최상위 -> 그대로 if (node[position] == position) return position; // 자신이 최상위가 아니면 부모노드를 ..