Algorithm 썸네일형 리스트형 [Algorithm/Java][백준] 6603 로또 [백준] 6603 로또 https://www.acmicpc.net/problem/6603 문제 접근 백트래킹 방식으로 접근하여 재귀함수를 이용한 DFS를 이용하여 풀었다. 먼저 입력을 받은 숫자를 nums에 저장하고 사용했는지를 저장하기 위해서 nums와 같은 크기의 boolean 배열로 visited를 만들었다. 그리고 최종적으로 6개의 로또 번호를 저장하기 위한 배열 lotto를 만들었다. 결과가 오름차순으로 나와야 해서 lotto[cnt-1]과 nums[i]를 비교해서 탐색을 건너뛰도록 만들었다. Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BOJ.. 더보기 [Algorithm/Java][프로그래머스] 프린터 [프로그래머스] 프린터 https://programmers.co.kr/learn/courses/30/lessons/42587 문제접근 인쇄 대기열에서 우선순위가 높은 것 부터 인쇄를 해야하고, location에 있는 작업이 몇번째로 인쇄되는지를 구해야한다. 그래서 task 클래스를 만들어 우선순위와 처음 주어진 인덱스를 저장하고 이를 큐에 저장을 하고, 가장 큰 우선순위를 표현하기위해서 우선순위 큐를 이용해서 최대 힙을 이용했다. 그래서 해당 location에 있는 작업이 인쇄될 때까지 while문을 돌리도록 했다. Code import java.util.PriorityQueue; import java.util.Queue; import java.util.Collections; import java.uti.. 더보기 [Algorithm/Java][백준] 14502 연구소 [백준] 14502 연구소 https://www.acmicpc.net/problem/14502 문제접근 모든 맵을 돌면서 벽을 3개 세울 수 있는 경우를 모두 탐색해야한다. 재귀함수를 이용해서 벽을 세울 수 있는 지점에서 벽을 세우는 경우와 세우지 않는 경우를 모두 탐색한다. 크게보면 알고리즘은 다음과 같다, 1.벽을 3개 세운다 2.바이러스를 퍼뜨려 본다. 3.안전 영역을 센다. 4.이번 경우가 최대 안전 영역인지 확인한다. 5.1~4를 모든 경우를 탐색한다. Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import jav.. 더보기 [Algorithm/Java][프로그래머스] 더 맵게 [프로그래머스] 더 맵게 https://programmers.co.kr/learn/courses/30/lessons/42626 문제접근 주어진 음식 배열에서 스코빌지수가 가장 낮은 두 음식을 섞어서 기준인 K를 넘겨야 한다. 두 음식을 섞은 결과도 다시 음식 배열에 추가해서 연산을 해야하기 때문에, 계속해서 오름차순을 유지할 수 있는 최소힙을 사용했다. Code import java.util.PriorityQueue; class Solution { public int solution(int[] scoville, int K) { PriorityQueue minHeap = new PriorityQueue(); for(int food: scoville) minHeap.add(food); int answer =.. 더보기 [Algorithm/Java][프로그래머스] 기능개발 [프로그래머스] 기능개발 https://programmers.co.kr/learn/courses/30/lessons/42586 문제접근 각 기능마다 남은 일수를 계산해주고, 앞 기능의 남은 일수보다 작은 일수를 가진 기능마다 count를 증가시켜서 한 배포 단계에 포함되도록 접근했다. Code import java.util.ArrayList; class Solution { public int[] solution(int[] progresses, int[] speeds) { int[] remainDays = new int[progresses.length]; //각 기능을 완료하는데 걸리는 일 저장 for(int i = 0; i 더보기 [Algorithm/Java][프로그래머스] 카카오프렌즈 컬러링북 [프로그래머스] 카카오프렌즈 컬러링북 https://programmers.co.kr/learn/courses/30/lessons/1829 문제접근 BFS를 이용해서 같은 색상을 가진 인접한 노드들을 탐색하고 영역과 영역의 크기를 구하였다. 그리고 좌표값과 해당 좌표의 색상 정보를 가진 XY클래스를 만들어서 Queue를 이용할 때 편하도록 하였다. Code import java.util.LinkedList; import java.util.Queue; class Solution { class XY { int x; int y; int value; // 해당 좌표의 그림 XY(){}; XY(int x, int y, int value){ this.x = x; this.y = y; this.value = value.. 더보기 [Algorithm/Java][백준] 1676번 팩토리얼 0의 개수 [백준] 1676번 팩토리얼 0의 개수 https://www.acmicpc.net/problem/1676 문제접근 처음에는 그냥 팩토리얼 재귀 함수를 이용해서 단순하게 0의 개수를 셀려고 했다. 근데 입력의 범위가 500까지 였고 500!는 long으로도 커버가 되지 않는 범위였다. 그래서 검색을 해본 결과!@! 맨 뒤에서 연속되는 0의 개수를 센다는 것은 2 * 5 의 갯수가 몇개가 있는지와 같다!!라는 엄청난 사실을 알게 되어서 이를 코드로 구현하였다....대박... Code import java.util.Scanner; public class BOJ1676 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); .. 더보기 [Algorithm/Java][프로그래머스] 신고 결과 받기 [프로그래머스] 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기 https://programmers.co.kr/learn/courses/30/lessons/92334 문제접근 일단 문제가 고려해야 할 것들이 많아서 처음에는 신고 당한 횟수, 신고한 사람, 알림 메일을 받을 횟수를 모두 따로 map을 이용해서 3개의 map을 만들어서 접근했는데 너무 복잡해서 그냥 3개의 정보를 가진 User 클래스를 만들게 되었다. 이렇게 하니까 더 생각하기 쉬웠고 내가 느끼기에는 복잡함이 많이 줄어들었다. Code import java.util.HashMap; import java.util.HashSet; class Solution { class User { HashSet report; // 신고한 .. 더보기 이전 1 2 3 4 5 6 7 8 다음