알고리즘 공부 120

[백준 13164번] 행복 유치원- java

문제 설명 1. 학생의 수 N, 조의 수 K가 주어진다. 2. N명의 학생은 오름차순으로 주어지고, K개의 조로 나누어야 한다. 3. 티셔츠를 맞추는 비용은 각 조에서 가장 키가 큰 원생과 가장 작은 원생의 차이만큼 주어진다. 4. 최소의 비용을 구하면 되는 문제이다. 풀이 과정 1. 그리디 문제이고, 이 문제랑 거의 똑같은 로직을 사용하면 쉽게 구할 수 있는 문제이다. 2. 풀이 방법은 거의 똑같은데, 설명하면 이와 같다. A. 학생 수가 순서대로 정리되어 있으므로, N명의 학생에 대해 키 차이를 구해준다. B. N-1개의 키차이의 배열이 주어질 텐데 이를 우선순위 큐에 하나씩 넣어준다. 우선순위 큐는 내림차순으로 정리된다. C. K개의 조로 이루어져 있고, 최소의 가격을 구해야 하므로 조를 구할 때 ..

알고리즘 공부 2022.04.09

[백준 5557번] 1학년 - java

문제 설명 1. N개의 숫자가 주어진다. 2. 맨 뒤의 숫자는 결과값이며, +와 -를 사용해가면서 숫자를 만든다. 3. 만들어지는 숫자는 0~20사이의 정수이다. 4. 마지막의 결과값을 만들 수 있는 경우의 수를 구하면 된다. 풀이 과정 1. 처음에는 완전탐색을 사용해야 하는 문제라고 생각했는데, 이거 완탐으로 절대 못푼다. 시간초과가 엄청 날것이다. 2. DP를 사용해서 진행한다. 순서는 아래와 같다. A DP는 이중 배열을 사용하여 [해당process숫자][만들어지는수사] = 가능한 경우의 수 를 저장하도록 한다. B 맨 처음 숫자는 당연히 [0][첫번째입력숫자] = 1일 것이다. C 나는 DP와 완전탐색을 약간 합친 방법을 통해 구현하였는데, 다음번의 경우를 구하려면 이전의 DP에서 만들어진 경우의..

알고리즘 공부 2022.04.07

[백준 2631번] 줄세우기- java

문제 설명 1. N개의 학생이 있다. 2. 학생들을 키순서대로 세워야 한다. 3. 키순서로 세우기 위해 이동시켜야 하는 학생의 최소 숫자를 구하면 된다. 풀이 과정 1. DP를 통해서 진행한다. '가장 긴 증가하는 부분 수열' 문제의 알고리즘을 적용해야 한다. 이전 문제를 풀어봤으면 사실 그 하위호환 문제이다. 근데왜 같은 골5...? 2. 옮길 학생이 아니라, 움직이지 않을 학생수를 구하자! 예를 들어 여기 문제처럼 3 7 5 2 6 1 4 를 보면 가장 긴 증가하는 부분 수열로 구하면 3 - 5 - 6 이렇게 학생들을 보면 얘네가 가장 긴 증가하는 부분 수열이고, 움직이지 않을 최대 숫자이다. 3. 그럼 이제 나머지 애들을 움직여주면 된다. 코드

알고리즘 공부 2022.04.06

[백준 2565번] 전깃줄- java

문제 설명 1. N개의 전깃줄이 있고, 이 전깃줄은 A전봇대와 B전봇대를 연결한다. 2. 전깃줄은 교차되는 경우가 있고, 교차되어서는 안된다. 3. 그렇기 때문에 교차되는 전깃줄을 없애주어야 한다. 4. 교차되는 전깃줄이 없도록, 전깃줄을 제거해주는 최소 개수를 return하면 된다. 풀이 과정 1. DP를 통해서 진행한다. 처음에 생각하는것이 조금 어려운데 '가장 긴 증가하는 부분 수열' 문제의 알고리즘을 적용해야 한다. 2. 위의 그림을 통해 확인해 보면, A전봇대의 숫자에 대해 오름차순으로 정렬한 후, 이곳에서 B와 연결할 때에 큰 위의 가장 긴 증가하는 부분 수열을 적용하면 교차하지 않는 전선의 개수를 구할 수 있게 된다. 그 이유에 대해 말하자면 A 처음 전봇대 기준으로 만약 1 - 8 이 연결..

알고리즘 공부 2022.04.06

[백준 23352번] 방탈출 - java

문제 설명 1. NxM크기의 격자판이 주어진다. 2. 상하좌우로 움직일 수 있으며, 각 방의 이동은 최단 경로로 움직인다. 3. 이렇게 최단 경로로 움직여서 가장 먼 거리를 움직이면, 그 시작점과 도착점이 비밀번호가 된다. 4. 가장 먼 거리가 여러개면 그 중 시작점과 도착점의 합이 큰 것이 비밀번호가 된다. 풀이 과정 1. 최단 경로 -> BFS 그냥 공식처럼 외워서 진행하자. 2. 우리는 어디서부터 시작하는게 최고로 가까울지 모른다. 그러므로 모든 점에 대해 그곳부터 시작하는 경우를 싹 다 구해야 할 것이다. 이 말은 완전탐색 + BFS로 진행해야 한다는 것이다. 3. BFS를 통해 나아가면서, 해당 위치가 마지막인지 어떤지 모르므로 매번 거리를 재서 진행하는것이 속편할 것이다. 이는 BFS여서 쉽게..

알고리즘 공부 2022.04.05

[백준 1461번] 도서관 - java

문제 설명 1. N권의 책, 한번에 들수있는 양 M이 주어진다. 2. 현재 위치 0으로부터 해당 책이 들어가야하는 위치가 N개 주어진다. 3. 모든 책을 원래 위치에 가져다 놓는 최소 거리를 구하라. 4. 마지막 책을 가져다가 두면 더이상 0위치로 돌아올 필요는 없다. 풀이 과정 1. 그리디 문제이고, 문제 풀이를 떠올리는것은 힘들지만 구현은 쉬운 문제이다. 2. 중요한 것은 거리가 +, - 두 가지로 주어진다는 것이고, 0의 위치를 지나가기 때문에 각각의 이동이 따로따로 행해져야 한다는 것이다. 3. 그리고 어느 쪽이든 가장 먼곳까지 갔다가 돌아오면 된다. 4. 마지막 책을 갖다 놓았을 때 더이상 0의 위치로 돌아올 필요는 없으니, 가장 먼곳에 마지막으로 책을 가져다 두면 될것이다. 5. (2)번의 문..

알고리즘 공부 2022.03.29

[백준 15810번] 풍선 공장 - java

문제 설명 1. N명의 스태프, 만들어야 하는 풍선M이 주어진다. 2. 각 N명의 스태프가 1개의 풍선을 부는 데 들어가는 시간이 주어진다. 3. M개의 풍선을 만드는 최소시간을 구하라 풀이 과정 1. 이분탐색이다. 2. 이분탐색 -> Long타입에 주의하자...허헣 풀이방법 자체는 이전하고 별반 차이는 없다. - 몇 분의 시간이 주어지고, 해당 시간동안 몇개의 풍선을 불 수 있는지 구하면 된다. 3. 왼쪽 -> 0으로 시작하면 된다. 4. 오른쪽 -> 풍선 부는데 제일 오래걸린 시간 * 풍선 개수면 일단 가장 오래걸리는 시간이 구해진다. 5. 만약 3, 5, 6분마다 한개씩 풍선을 만든다고 가정하면 7분이 주어지면 각각 2, 1, 1개를 만들것이다. 6. 현재 시간에 분 최대 풍선개수가 원하는 개수보다..

알고리즘 공부 2022.03.26

[백준 2792번] 보석 상자- java

문제 설명 1. 인원수 N, 보석의 색깔수 M이 주어진다. 2. M가지 색에 대해 각각의 개수가 주어진다. 3. 이 M개의 보석을 N명의 학생에게 나누어 줄 때, 모든 인원에게 나누어 줄 수 있는 최소 보석 개수를 구해주면 될것이다. 풀이 과정 1. 이분탐색이 어려워서 공부하기 위해 하나 더 풀어보았다. 이전문제에서 공부했어서 풀이 자체는 금방 도출했는데... 이번에는 뭔가 구현이 어려웠다. 더 풀어봐야 할 것 같다. 2. 중요한 값들에 대해 이야기하자면 A. 주어지는 보석개수의 차이가 아니라 개수 자체에 관한 문제라는것 -> 그냥 보석을 N명에게 모두 나누어 줄 수 있는 최소개수를 가지면 된다. B. 아예 보석을 못받는 학생이 있어도 괜찮다는것 -> 학생수보다 주는보석방법의 개수가 작거나 같으면 싹다 ..

알고리즘 공부 2022.03.26

[백준 2343번] 기타 - java

문제 설명 1. 강의의 수 N, 블루레이 녹화 개수 M이 주어진다. 2. N에 맞추어 강의가 하나씩 주어진다. 3. N개의 강의를 M개로 나누어 저장할 수 있는 가장 최소의 분단위를 구하면 된다. 풀이 과정 1. 이분 탐색 문제이다. 실버1 난이도인데 나는 왜이리 이분탐색이 어려운지 모르겠다... 2. 중요한 값들에 대해 이야기하자면 A. N개의 강의를 M개로 나누어 담는다는것 -> 한 개의 블루레이의 크기를 늘리고 줄이며 담을 수 있는 강의를 만들어가면 될것. B. 블루레이는 모두 같은 크기를 갖고, 최소의 크기로 만들어야 한다는것 -> 이분탐색을 M개의 값을 갖자마자 나가지 말고 그 최소를 구할것 이다. 3. 먼저 M은 N보다 작거나 같으므로 최소 블루레이 크기는 최대 길이 강의로부터 시작할 것이다...

알고리즘 공부 2022.03.26

[백준 4179번] 불! - java

문제 설명 1. 미로의 크기 R, C가 주어진다. 2. 불이 나고, 지훈이가 미로안에 있다(지훈이는 한명) 3. 불과 지훈이가 상하좌우로 움직일수 있고 지훈이는 불과 벽을 뛰어넘지 못한다. 4. 지훈이가 미로를 탈출(가장자리 도착)하는 가장 짧은 방법을 구하라. 풀이 과정 1. BFS에 약간의 구현을 더해서 진행하는 문제이다. 2. 먼저 둘이 동시에 이동한다 가정해보면 코드상에서는 지훈이의 이동보다 불의 이동이 먼저 일어나야 하는데, - 코드에서 지훈이가 불보다 먼저 움직이면 이후에 타죽는다. - 불이붙은 지역에 지훈이는 갈 수 없다. 그러므로 지훈이를 불보다 늦게 움직이도록 생각한다. 3. 지훈이는 미로의 가장자리에 있으면 탈출 가능하다. 즉 처음부터 가장자리에 있으면 그냥 탈출하면 된다. 4. 지훈이..

알고리즘 공부 2022.03.20