목록2025/05 (12)
hwooo

https://www.acmicpc.net/problem/1931풀이선택할 수 있는 회의가 많아지려면, 회의가 일찍 끝나면 된다.회의의 끝나는 시간을 기준으로 정렬한 후, 앞의 회의가 끝나면 다음 회의를 시작하는 방식으로 풀었다.시작 시간과 끝나는 시간이 같은 회의도 있기에 끝나는 시간이 같다면 시작 시간이 작은 순으로 정렬했다.Java 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main { private static int[][] times; public static void main(String[] arg..

https://www.acmicpc.net/problem/1987풀이dfs로 탐색하되, 현재 해당하는 위치 + 위치의 알파벳 방문 여부까지 확인하며 탐색한다.이 때 알파벳 방문 여부는 비트마스킹을 사용했으나, visited 배열처럼 1차원 배열을 활용해도 가능하다. Java 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { private static int R, C; private static int answer = 0; private static char[][] map; private static boolean[][] visited..

https://www.acmicpc.net/problem/1062풀이규칙이 있는 줄 알았으나 파악하지 못 해 알고리즘을 봤다.비트마스킹이 있어 각 단어들에 포함된 알파벳을 int형 정수에 비트마스킹으로 표시했다.배울 문자들을 확인할 때도 비트마스킹을 활용, 각 비트의 자리에 알파벳을 표시했다. 이후 브루트포스로 탐색하며 K개의 문자를 배웠을 때 현재 읽을 수 있는 단어가 몇 개인지 확인하여 최댓값을 반환한다.이 때 현재 단어를 읽을 수 있다면 배운 문자들에 현재 단어가 포함되어야 되므로 & 연산을 활용해 확인했다.Java 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public clas..

https://www.acmicpc.net/problem/2473 풀이합이 최소가 되는 두 수를 고르는 것과 원리는 동일하다.세 개의 수를 골라야 하므로 하나의 수를 기준으로 세워두고 투 포인터로 탐색, 합이 최소가 되는 세 개의 수를 찾는다.Java 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main { private static int N; private static long[] values; private static long[] minValues = new long[3]; private st..

https://school.programmers.co.kr/learn/courses/30/lessons/258707 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이다음 라운드로 갈 수 있는지를 확인하는 조건을 모르겠어서 다른 풀이를 봤다.n + 1 을 만들 수 있는 조건이라면 코인을 최소로 사용해야 더 많은 라운드로 갈 수 있으니,코인을 최대한 적게 쓰는 방향으로 각 라운드를 지나야 하는 게 포인트였다.현재 가지고 있는 코인으로 다음 라운드를 갈 수 있는지 확인 -> 코인 1개로 갈 수 있는지 -> 2개로 갈 수 있는지를순서대로 탐색했다. 현재 라운드에서 몇 개의 수를 들고 가야 할지가 고민이었는데next라..

https://www.acmicpc.net/problem/16236 풀이물고기 크기 빈 칸 / 물고기 크기 = 아기상어 크기 : 지나갈 수 있음bfs로 다음 노드를 탐색하며 가장 가까우면서 위쪽, 왼쪽인 노드의 지점으로 이동이 때 먹는 지점을 우선순위 큐를 사용해 탐색해야 한다.bfs는 가장 위쪽, 왼쪽인 지점을 보장하지 못 함. 문제가 어렵진 않은데 이걸 몰라서 좀 헤맸다ㅠ골드 3부터는 이런 작은 차이 하나가 답을 가르는 문제가 많아 더 노력해야겠다Java 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayDeque;import java.util.Pr..

https://www.acmicpc.net/problem/2098풀이완전 탐색의 방법으로 시도하려 했으나, 이 경우 탐색해야 할 노드의 수가 많아져 시간 초과가 발생한다.알고리즘을 보니 비트마스킹과 DP가 있어 바로 풀이를 봤다.유명한 알고리즘이었으나 접근 방법이 생소해서 모르면 못 풀겠다 싶었다. [알고리즘] 외판원 순회 문제모든 도시들을 단 한번씩만 방문하고 원래 시작점으로 돌아오는 최소 비용을 구해보자!velog.io Java 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { private static final int INF = 16_000_..

https://school.programmers.co.kr/learn/courses/30/lessons/142085 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이데이터의 수가 작지 않아서 dp를 생각했는데, 정리할 수 있는 기준이 생각나지 않았다.더 생각해보니 일단 막을 수 있는 만큼 병사를 막고, 안 되는 케이스에만 무적권을 사용해야겠다고 생각했다.우선순위 큐를 사용, 막을 수 없을 때는 현재까지 나온 값 중 가장 큰 값에 무적권을 사용했다고 판단, 병사를 복구하여 다시 탐색했다. Java 코드import java.util.*;class Solution { public int solution(int ..