GreedyAlgorithm 8

[자바] 1744 수 묶기

자바 / 골4 / 그리디 알고리즘https://www.acmicpc.net/problem/1744으악!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 맨 마지막에 답 출력하는 부분을        System.out.println(sum);을 tab 자동완성으로 쓰다가         System.err.println(sum);로 써버려서런타임 에러가 나는데 백준에서 제공하는 어떤 런타임 에러인지 나오는 기능도 안먹히고 내가 짠 코드에서 런타임 에러가 날 만한 부분은 인덱스에서 밖에 없는데 하면서 인덱스 부분을 한시간 넘게 들여다 보고 고민하다가.. 결국 지피티한테 코드 붙여넣기 하고 어디서 ..

알고리즘 2024.08.04

[자바] 1041 주사위

자바 / 골5 / 그리디 알고리즘https://www.acmicpc.net/problem/1041그리디 알고리즘으로 분류되지만 나는 브루트 포스를 이용해서 풀었다. N = 2, 3, 4일 때의 전개도를 생각해 보고 점화식을 만들어 풀었다. 내가 만든 공식은, a, b, c가 각각 정육면체의 한 면이 포함될 때, 두 면이 포함될 때, 세 면이 포함될 때의 합 값이라면ans = c * 4 + b * ((2 * N - 3) * 4) + a * ((N - 1) * (N - 2) * 4 + (N - 2) * (N - 2)); 그리고 a, b, c를 구하는 과정을 각각 브루트 포스로 구했다a의 값, 즉 주어진 값 중 가장 작은 값을 구하는 코드 for(int i = 0; i dice[i]) { ..

알고리즘 2024.08.03

[자바] 1092 배

자바 / 골5 / 그리디 알고리즘https://www.acmicpc.net/problem/1092 ㅜㅜ 첫 접근을 잘못해서 시간을 많이많이 쓰고 정말 힘두러따계속 될 것 같은데... 하면서 계속 그냥... 그냥 안되는 코드를.. 점점 복잡하게 만들면서... 계쏙계쏙.... 멈추지 못하고... 계속 풀어따........... 그리디라는, 매 순간 최적의 해 라는 알고리즘 접근법에서는 이미 한참 벗어났는데도....ㅜㅜㅜㅜㅜㅜㅜㅜㅜ중간에 한 번 친구의 도움으로... 하던 걸 멈추고 생각을 refresh하는 과정을 가졌다.. 근데 너무 늦게 가졌다 흑흑arraylist라는 자료형도 자바에서는 처음 다뤄본 것 같다. 상자의 자료형을 처음에는 그냥 배열로 했다가 뭐였지? 뭐가 접근이 안돼서 아 그럼 우선순위 큐를 ..

알고리즘 2024.08.01

[자바] 2457 공주님의 정원

자바 / 골3 / 그리디 알고리즘https://www.acmicpc.net/problem/2457 재밌게 푼 것 같다. 알고리즘과 구현 모두 얼마 걸리지 않았다. 하지만 "만약 두 조건을 만족하는 꽃들을 선택할 수 없다면 0을 출력한다."라는 조건을 체크해 주지 않아서... 85프로에서 시간초과가 걸리고(무한 루프) 0을 출력해주지 않아 틀리기도 했었다. 처음에 입력을 어떻게 받을 지 고민하다가, 그냥 들어오는 모든 날짜를 하나의 최대 8자리의 정수에 저장해놓고, 피는 날짜(sdate)는 해당 값들의 크기 비교를 통해, 지는 날짜는 (해당 값들 % 10000) 끼리의 크기 비교를 통해 결정하는 방법을 채택했다.그리고 들어온 모든 날짜를 오름차순으로 정렬하여, 피는 날짜 기준으로 정렬하여 순차적으로 탐색했..

알고리즘 2024.07.26

[자바] 1202 보석 도둑

자바 / 골2 / 그리디 알고리즘 / 자료구조 / 우선순위 큐https://www.acmicpc.net/problem/1202 우선, C에서는 pair를 우선순위 큐의 요소로 넣어주면 쉽게 풀 수 있는 코드이지만, 자바에는 pair의 개념이 없어서 직접 구조체를 만들어줘야 했다. 이 과정에서 학습한 자바에서의 구조체 선언, 생성과 초기화에 대해서는 추후 다른 게시글로 다루도록 한다.또한 여타 다른 그리디 문제들과 마찬가지로... 시간 초과와의 힘든 싸움이었다. class Jewelry{ int weight; int price; public Jewelry(int weight, int price) { this.weight = weight; this.price = pr..

알고리즘 2024.07.25

[자바] 1715 카드 정렬하기

자바 / 골4 / 그리디 알고리즘https://www.acmicpc.net/problem/1715 골4 치고 너무 쉬운 문제였다.우선순위 큐를 사용해야겠다 라는 생각만 갖추면 그냥 바로 풀리는 문제였다. 작은 것 우선으로 더해주면 끝이었으므로... 다만 자바에서 우선순위 큐를 사용하는 방식을 이번에 새로 알게 되었기 때문에, 해당 내용을 따로 정리하고자 한다. 다음은 전체 코드이다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.PriorityQueue;public class Main{ private static int N; private static ..

알고리즘 2024.07.23

15903 카드 합체 놀이

자바 / 실1 / 그리디 알고리즘https://www.acmicpc.net/problem/15903 알고리즘을 생각해 내는 것도 쉬웠고, 알고리즘을 생각해 낸 다음에는 푸는 데 20분도 걸리지 않았다. 다만, 최대 입력을 받는 경우 그 합이 int의 범위를 넘어가 오버플로우가 날 수 있는 경우를 고려하지 않아 sum과 arr의 자료형을 long으로 바꾸어 다시 풀어서 맞았다. 알고리즘: 매 순간 가장 작은 수 두 개를 더하는 방식으로 진행하면 쉽게 풀 수 있다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;import java.uti..

알고리즘 2024.07.19

11501 주식

자바 / 실2 / 그리디 알고리즘https://www.acmicpc.net/problem/11501 문제 이해 홍준이가 할 수 있는 행동주식 하나를 산다.원하는 만큼 가지고 있는 주식을 판다.아무것도 안한다.ex) 3 5 9의 경우, 첫 번째와 두 번째 날 주식을 하나씩 산다 (-3-5 = -8)세 번째 날, 가지고 있던 주식 두 개를 9원에 판다 (9x2 = 18)최종 이익: -8 + 18 = 10ex) 1 1 3 1 2 의 경우첫 번째와 두 번째 날 주식을 하나 씩 산다 (-1-1 = -2)세 번째 날, 가지고 있던 주식 두 개를 3원에 판다 (3x2 = 6)네 번째 날, 주식을 하나 산다 (-1)마지막 날, 가지고 있던 주식 한 개를 2원에 판다 (2x1 = 2)최종 이익: -2 + 6 -1 + 2..

알고리즘 2024.07.19