본문 바로가기

전체글118

[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.
[Programmers-Java] 등산코스 정하기 https://school.programmers.co.kr/learn/courses/30/lessons/118669 접근 출입구의 강도를 0으로 설정한다. 출입구와 연결된 등산로를 우선순위 큐에 삽입하여 탐색한다. 다음 지점의 강도는 현재 지점까지의 강도와 다음 지점과 연결된 등산로의 강도 중 최댓값이다. 산봉우리까지의 모든 코스를 탐색한다. 산봉우리에서 내려오는 것은 생각하지 않는다. 예를 들어 1 (출입구) -> 2 -> 5 (산봉우리) 코스의 강도가 최솟값이면 해당 코스로 내려오면 된다. 어떤 지점에서 현재 코스의 강도가 이전 코스의 강도보다 크면 현재 코스를 탐색하지 않는다. 풀이 import java.util.*; class Solution { private static int MAX = Int.. 2024. 1. 24.
[Programmers-Java] 가장 큰 정사각형 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/12905 접근 행 + 1, 열 + 1 크기의 배열을 생성한다. 표에서 1이면 좌, 상, 좌상의 정사각형을 확인하고 그 중 최솟값 + 1을 계산한다. 정사각형의 한 변의 길이를 메모이제이션한다. 풀이 class Solution { public int solution(int[][] board) { int row = board.length + 1; int col = board[0].length + 1; int maxSide = 0; int[][] dp = new int[row][col]; for (int r = 1; r < row; r++) { for (int c = 1; c < col; c++) { if.. 2024. 1. 24.