본문 바로가기

PS109

[Programmers-Java] 도넛과 막대 그래프 https://school.programmers.co.kr/learn/courses/30/lessons/258711 접근 생성한 정점은 들어오는 간선이 없고 나가는 간선이 2개 이상있다. 도넛의 모든 정점은 들어오는 간선과 나가는 간선이 1개씩 있다. 막대의 마지막 정점은 나가는 간선이 없다. 8자의 정점 중 한 개는 나가는 간선이 2개있다. 생성한 정점과의 간선을 포함하여 특징을 정리하면 다음과 같다. in 간선 out 간선 생성한 정점 0 > 1 도넛 (모든 정점) >= 1 1 막대 (마지막 정점) >= 1 0 8자 (한 정점) >= 2 2 풀이 import java.util.*; class Solution { public int[] solution(int[][] edges) { Map out = n.. 2024. 1. 25.
[Programmers-Java] 석유 시추 https://school.programmers.co.kr/learn/courses/30/lessons/250136 접근 석유를 bfs 탐색해서 덩어리마다 숫자로 라벨링한다. Map에 덩어리의 석유량을 저장한다. 열마다 시추관을 설치하고 만날 수 있는 덩어리의 숫자를 저장한다. 덩어리의 석유량을 합한다. 풀이 import java.util.*; class Solution { private int n; private int m; private Map oilAmount = new HashMap(); private int[] directions = new int[] {1, 0, -1, 0}; public int solution(int[][] land) { this.n = land.length; this.m =.. 2024. 1. 25.
[Programmers-Java] 붕대 감기 https://school.programmers.co.kr/learn/courses/30/lessons/250137 접근 공격을 순회하면서 현재 초와 같으면 피해를 입는다. 같지 않으면 붕대를 감는다. 회복 후 체력이 최대 체력보다 큰지 확인한다. 공격의 최대 공격 시간만큼 반복하기 때문에 시간복잡도는 O(1000)이다. 풀이 class Solution { private int currentHealth; private int sec = 1; private int successStreak; public int solution(int[] bandage, int health, int[][] attacks) { currentHealth = health; int i = 0; while (i < attacks.le.. 2024. 1. 25.
[Programmers-Java] n + 1 카드게임 https://school.programmers.co.kr/learn/courses/30/lessons/258707 접근 임의의 카드 x와 매칭되는 카드는 하나밖에 없다. 처음에 뽑은 n / 3개의 카드와 매칭되는 카드는 무조건 구매한다. 이 때 코인은 1개 필요하다. 구매하지 않고 넘긴 카드라도 나중에 구매할 수 있다. 페어가 없고 코인이 2개라면 구매하지 않고 넘긴 카드 중 페어가 되는 카드 2개를 구매한다. 풀이 import java.util.*; class Solution { private Set myCards = new HashSet(); private Set tempCards = new HashSet(); private int pair; private int round = 1; private .. 2024. 1. 25.
[Programmers-Java] 가장 먼 노드 https://school.programmers.co.kr/learn/courses/30/lessons/49189 접근 다익스트라 알고리즘을 사용하여 1번 노드에서 모든 노드까지의 거리를 구한다. 풀이 import java.util.*; class Solution { private List[] graph; private int[] distances; private static final int INF = Integer.MAX_VALUE; public int solution(int n, int[][] edge) { init(n); for (int[] e : edge) { graph[e[0]].add(new Node(e[1], 1)); graph[e[1]].add(new Node(e[0], 1)); } di.. 2024. 1. 24.
[Programmers-Java] 양궁대회 https://school.programmers.co.kr/learn/courses/30/lessons/92342 접근 라이언의 화살을 dfs 탐색한다. 과녁에 맞췄지만 어피치보다 개수가 적어서 점수를 얻지 못하는 경우도 탐색해야 한다. 어피치의 총 점수를 구하고 라이언의 점수를 빼 나간다. 풀이 import java.util.*; class Solution { private int[] ryan = new int[11]; private int[] apeach; private List candidates = new ArrayList(); private int maxDiff; public int[] solution(int n, int[] info) { this.apeach = info; dfs(n, 0, -.. 2024. 1. 24.
[Programmers-Java] 주차 요금 계산 https://school.programmers.co.kr/learn/courses/30/lessons/92341 접근 Map에 주차 시간을 누적한다. 누적된 주차 시간에 따라 주차 요금을 계산한다. 풀이 import java.util.*; class Solution { private Map parkingLot = new HashMap(); public int[] solution(int[] fees, String[] records) { for (String record : records) { String[] r = record.split(" "); int minute = getMinute(r[0]); if (r[2].equals("IN")) { // (1) minute *= -1; } else { min.. 2024. 1. 24.
[Programmers-Java] 성격 유형 검사하기 https://school.programmers.co.kr/learn/courses/30/lessons/118666 접근 Map에 성격 유형의 점수를 누적한다. 풀이 import java.util.*; class Solution { private static final char[][] MBTI = new char[][] { { &#39;R&#39;, &#39;T&#39; }, { &#39;C&#39;, &#39;F&#39; }, { &#39;J&#39;, &#39;M&#39; }, { &#39;A&#39;, &#39;N&#39; } }; // (1) private Map scores = new HashMap(); public String solution(String[] survey, int[] choic.. 2024. 1. 24.
[Programmers-Java] 표 병합 https://school.programmers.co.kr/learn/courses/30/lessons/150366 접근 UPDATE: 부모 셀을 찾아 업데이트한다. MERGE: 유니온-파인드를 사용하여 두 셀을 합친다. UNMERGE: 부모 셀을 바라보는 셀들을 자신을 바라보도록 변경한다. PRINT: 부모 셀의 값을 출력한다. 풀이 import java.util.*; class Solution { private static List result = new ArrayList(); private static final String EMPTY = "EMPTY"; private static int[] parents = new int[2501]; private static String[] table = new.. 2024. 1. 24.
[Programmers-Java] 코딩 테스트 공부 https://school.programmers.co.kr/learn/courses/30/lessons/118668 접근 초기 알고력, 코딩력과 모든 문제를 풀 수 있는 알고력, 코딩력 중 최댓값을 구한다. 2차원 배열을 생성하여 최댓값까지 알고력과 코딩력을 메모이제이션한다. dp[알고력][코딩력] = 시간이고 알고력과 코딩력의 점화식은 dp[알고력 + 1][코딩력] = min(dp[알고력 + 1][코딩력], dp[알고력][코딩력] + 1) dp[알고력][코딩력 + 1] = min(dp[알고력][코딩력 + 1], dp[알고력][코딩력] + 1) 문제를 풀었을 경우 dp[알고력 + alp_rwd][코딩력 + cop_rwd] = min(dp[알고력 + alp_rwd][코딩력 + cop_rwd], dp[알고력.. 2024. 1. 24.