Algorithm 썸네일형 리스트형 [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; // 신고한 .. 더보기 [Algorithm/Java][LeetCode] 121. Best Time to Buy and Sell Stock [LeetCode] 121. Best Time to Buy and Sell Stock https://leetcode.com/problems/best-time-to-buy-and-sell-stock 문제접근 가장 싸게 사서 가장 비싸게 샀을 때 얻는 이윤을 구하는 문제이다. 다이나믹 프로그래밍을 이용해서 dp배열에 지금까지 중에서 가장 싼 값을 저장하고 현재 날짜의 가격 prices[i]와 그 전날까지 가장 싼 가격 dp[i-1]을 빼서 이윤을 구한 다음 max와 비교한다. 그리고 오늘 가격이 dp[i-1]보다 싸다면 dp[i]를 오늘 가격으로 바꿔주고 아니라면 dp[i-1]을 넣어준다. Code class Solution { public int maxProfit(int[] prices) { int max.. 더보기 [Algorithm/Java][LeetCode] 101. Symmetric Tree [LeetCode] 101. Symmetric Tree https://leetcode.com/problems/symmetric-tree 문제 접근 루트 노드를 기준으로 왼쪽 서브트리와 오른쪽 서브트리가 대칭인지를 파악하는 문제이다. BFS처럼 큐를 이용해서 반복문으로 풀려고 했으나, 뭔가 잘 안되서 재귀함수를 이용했다. 왼쪽과 오른쪽 서브트리의 노드를 재귀 함수를 이용해 비교 나올 수 있는 경우의 수 4가지 1. 양쪽 노드가 모두 null인 경우(아무 문제 없이 끝까지 트리를 순회 헀으므로 true) 2. 한쪽 노드만 null인 경우(비대칭이므로 false) 3. 양쪽 노드의 값이 다른 경우(비대칭이므로 false) 4. 양쪽 노드의 값이 같은 경우(지금까지는 대칭이므로 추가적인 트리 순회 - 재귀 함수.. 더보기 [Algorithm/Java][백준] 2805번 나무 자르기 [백준] 2805번 나무 자르기 https://www.acmicpc.net/problem/2805 문제접근 처음에는 감이 안잡혀서 밑에 알고리즘 분류가 이분 탐색이라고 써져있어서, 옛날에 배운 기억으로 코드를 작성했다. left, right, mid를 이용해서 값을 찾았다. 만약 딱 떨어지는 값이 없을 경우, 적어도 m을 넘겨야하기 때문에 right값을 return하도록 했다. Code import java.util.Arrays; import java.util.Scanner; public class BOJ2805 { static int cutHeight(int[] trees, int m){ Arrays.sort(trees); int left = 0; int right = trees[trees.length.. 더보기 이전 1 2 3 4 5 6 7 8 9 다음