// 알고리즘 1. 구현 2. 탐색 배열 사용 -> 원래 8방 탐색을 해야하지만 왼쪽 위부터 검사한다면 4방 탐색으로도 가능 -> 우상, 우, 우하, 하 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 오목_2615_re { static int[] dr = { -1, 0, 1, 1 }; static int[] dc = { 1, 1, 1, 0 }; static int[][] map; public static void main(String[] args) throws IOException { Buffer..
//알고리즘 1. 그래프 탐색 2. 주어진 간선으로 인접리스트를 생성 3. 방문배열 ->방문배열을 int배열로 만들어 1부터 시작하여 도달할 수 있는 거리를 저장한다. -> 이미 방문한 노드는 0이 아님 -> 시작점은 -1로 세팅해야 함 4. 방문배열의 최대값을 찾고 정답을(가장 먼 노드들)찾음 더보기 import java.util.*; class Solution { ArrayList[] list; int[] v; class Point{ int r,cnt; public Point(int r,int cnt){ this.r = r; this.cnt = cnt; } } public int solution(int n, int[][] edge) { int answer = 0; list = new ArrayList..
//알고리즘 1. 완전탐색 2. brown과 yellow의 합을 만들 수 있는 곱셈의 조합을 다 계산해봐야 함. -> yellow가 1이상 있어야 하니까 i = 3이상이 되어야 함. 3. for문을 3부터 돌려서 모든경우를 체크 더보기 import java.util.*; class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; int sum = brown + yellow; int y = 0, x = 0; for(int i = 3; i
// 알고리즘 1. 순열 + 조합문제 2. 주어진 문자열을 각가 나눔 -> char 배열을 사용하여 각각 나눔 3. 1개 뽑는 경우 부터 다 뽑는 경우까지 조합을 만듦 4. 만들어 조합을 HashSet에 저장 -> ex) 011과 11이 같은 수 이므로 set을 사용하여 중복데이터를 없애줌. 5. 만들어진 set을 가지고 소수를 판별하면 됨 -> 2부터 시작하여 소수인지 판별 더보기 import java.util.*; class Solution { static int ans; static char[] num; static boolean[] v; static HashSet set; public int solution(String numbers) { num = numbers.toCharArray(); v =..
//알고리즘 1. 탐색 -> 최소시간을 출력하므로 bfs탐색 2. 활성화 시킬 바이러스 선택 -> 바이러스를 ArrayList로 받고 선택할 바이러스를 조합으로 구현 3. 선택된 바이러스를 큐에넣고 bfs탐색 시작 -> 최소시간이기 때문에 우선순위큐 사용 -> 활성 바이러스가 비활성 바이러스가 있는 칸으로 가면 비활성 바이러스가 활성으로 변한다라는 조건이 있어서 탐색 중 비활성화된 바이러스에 도달한다면 현재의 시간+1 값으로 세팅해 큐에 다시 넣음 -> bfs가 끝나면 바이러스가 안 퍼진 곳이 있는 지 확인 후 정답 출력 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import..
//알고리즘 1. 구현 2. 0부터 8까지 숫자배열 사용 3. 6과 9를 같이쓴다는 부분만 해결하면 됨. -> 6과 9의 개수를 6배열에만 카운팅하고 나누기 2를해서 올림 하면 됨. 4. 숫자배열중 가장 큰 수가 필요한 세트의 개수가 됨. 더보기 import java.util.Scanner; public class 방번호_1475 { static int N, number[]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); number = new int[9]; String str = Integer.toString(N); for (int i = 0; i < str.length(); i..
// 알고리즘 1. 탐색문제 -> 최단 거리를 구하기 때문에 BFS 탐색 2. 고슴도치는 물이 찰 예정인 칸으로 이동할 수 없다. 는 조건 -> 물웅덩이 부터 탐색을 시작함 3. 물웅덩이와 고슴도치의 이동을 다르게 봐야하기 때문에 3차원 방문배열 사용 4. 물웅덩이 1 사이클 => 고슴도치 1 사이클 씩 번갈아가면서 탐색 -> 각각 어레이리스트를 만들어 다음번 시행되어야할 위치를 큐에넣지말고 어레이리스트에 저장 -> 한 사이클(while)이 끝나면 저장된 어레이리스트를 큐에 집어넣고 리스트 초기화 5. 도착할 때 까지 무한으로 실행 -> 탈출 조건은 고슴도치가 도착점에 도달하지 못하고 이동할 곳도 없을 경우 (큐의 사이즈가 0일 때) 더보기 package baekjoon; import java.io.Bu..
//알고리즘 1. 자료구조를 활용한 풀이 -> HashMap 사용 2. 종류마다 옷의 개수를 구해야 하기 때문에 -> Key 는 옷의 종류인 kind로 하고 개수를 +1 씩 더해서 HashMap에 push 3. 경우의 수를 구함 -> 각 종류의 옷의 개수( n ) + 옷을입지않을경우( 1 ) 4. 경우의 수를 전부 곱합 5. 옷을 모두 입지않을 경우를 빼야하기 때문에 결과값 - 1 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.StringTokenizer; public class 패션왕신해빈_9375 {..
//알고리즘 1. 그래프 탐색 (트리) 2. 인접리스트를 만들고 방문배열을 만듦 3. 탐색시작 -> bfs를 사용하여 구현 -> 매번 탐색하면서 부모노드를 찾으면 방문배열을 매번 새롭게 생성하여야 하기 때문에 시간초과가 남 -> 해당노드의 부모노드를 저장하는 배열을 만들어 bfs를 한번 돌면서 각 노드의 부모노드를 저장 더보기 package baekjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Strin..
//알고리즘 1. 이분 탐색문제 2. N값이 최대 20만이기 때문에 아이디어가 필요함 -> 최대의 거리를 변경해가면서 찾아야 함. 3. 시작점은 가장왼쪽집 끝점은 가장오른쪽집으로 시작해서 중간값(최대 거리)을 구함 4. 최대거리를 넘는 집의 개수를 구해서 설치해야할 공유기의 수보다 크거나같다면 시작점을 1씩 더해주고 작다면 끝점을 1씩 빼서 결과값을 찾아 냄 (이분 탐색) 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class 공유기설치_2110 { static..
