목록Algorithm (19)
봄봄.devlog
https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 🎈 문제 풀이 현실 세계의 동전과 지폐의 가치는 작은 금액의 지폐의 몇 배수이다. 이 조건이 주어진 경우에, K 금액을 만족하는 동전의 최소수를 계산할 때 큰 동전부터 사용해야 한다. 예) 5만원, 1만원, 5천원, 1천원, 500원, 100원 165200원 = 5만원 + 5만원 + 1만원 + 5천원 + 100원 + 100원 모든 경..
https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료�� www.acmicpc.net 🎈 My 문제 풀이 문서도의 '중요도'를 확인. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있으면 뒤로 보낸다. 그렇지 않으면 바로 인쇄. 어떤 한 문서가 몇 번째로 인쇄되는지 알아내는 것. - 각 문서의 인덱스와 중요도 값을 저장할 수 있는 Document 클래스를 만들고, 중요도를 저장할 수 있는 ArrayList 배열을 따로 만들어서 관리했다. - 그리고 나서 중요도 Ar..
https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저� www.acmicpc.net 🎈 문제 풀이 - 레이저 나오면 pop하고 스택 사이즈 더하기 - 막대기의 끝이 나오면 스택 하나 제거하고 +1 🎈 소스 코드 public class Q10799_1 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in));..
https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 �� www.acmicpc.net 🎈 문제 풀이 명령 "back"을 처리하기 위해 큐에 있는 것들을 ArrayList 배열에 저장해서 마지막 값을 리턴하는 메소드를 만들었는데, 다른 사람의 코드를 보니 push하는 값을 따로 변수 선언을 하여 저장해놓고 쉽게 출력하더라.. 머리를 쓰자.. . 🎈 소스 코드 public class Q10845_1 { public static void main(String[] a..
https://www.acmicpc.net/problem/9012 9012번: 괄호 문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)�� www.acmicpc.net 🎈 문제 풀이 올바른 괄호는 1. 스택이 비어있고, 2. 모든 문자를 반복문에서 돌려야 한다. 🎈 소스 코드 package BaekJoon.Collection; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stac..
🎈문제 풀이 송신탑은 뒤에서 차례대로 하나씩 빼주기 때문에 Stack에 적합하다. 그런데 송신탑의 경우 수신탑보다 높이가 큰 것이 나올 때까지 계속 빼줘야 한다. - 뺏던 것을 다시 집어넣어줘서 원상복귀를 시켜주거나(스택 하나만을 사용하는 경우), 송신자가 바뀔 때마다 수신자 스택을 새로 생성해줘야 한다. - answer에 위치 값을 저장해줘야 하기 때문에 송신자와 수신자의 위치 정보를 알고 있어야 한다. 🎈 소스 코드 static int[] solution(int[] heights) { Stack stack = new Stack(); int[] ans = new int[heights.length]; for(int n : heights) stack.push(n); int sender, receiver; ..
https://programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이�� programmers.co.kr 🎈문제 풀이 큐 이용해서 풀면 되겠구나 하고 간단하게 생각했는데 생각보다 오래 걸렸던 문제.. - wait 큐와 bridge큐 2개를 만든다. - 트럭이 다리를 어느정도 지나가고 있는지 확인해야 건넜는지 여부를 알 수 있으므로 Truck 클래스를 만들어서 기록한다. - 종료조건 : 두개의 큐가 다 비어있는 경우, 모든 트럭이 다리를 건넜다는 ..
왜 이분탐색을 할까? 빠르게 원하는 답을 찾기 위해서! [ 풀이법 ] 정렬하고 탐색 시작하기!! 1. 최소 & 최대값의 중간값을 구한다. 2. 조건에 맞춰 총합이 M보다 작으면 최소값이 중간값이 된다. 3. 그렇지 않은 경우, 최댓값이 mid가 된다. -> 종료조건 : 이전의 mid의 값(preMid)가 새로운 mid값과 같으면 탐색을 멈춘다. (모든 값들 탐색 완료) [ 효율성 2번 에러 문제 ] 1. 요청한 금액의 총합이 준비된 예산(M)보다 적을 경우, 요청된 예산요청 중 가장 큰 요청을 return 2. 요청한 금액의 총합이 Integer 최대 값을 넘길 수 있으니, Long으로 선언 (효율성 2번 통과 방법) static int solution(int[] budgets, int M) { int ..