목록Data Structure & Algorithms (19)
yeonuel-tech

1. 분석추후 업데이트2. 설계추후 업데이트3. 구현 package implemented; import java.util.Collection; import java.util.Iterator; import test.MyDoublyLinkedListTest; public class MyDoublyLinkedList { private class Node { Node prev, next; Object obj; Node(Object obj) { this.obj = obj; } } Node first, last; // 맨 앞 노드, 맨 뒤 노드 public int size; // 리스트 사이즈(저장된 노드 개수) public MyDoublyLinkedList() { first = null; last = null; ..

1. 분석 추후 업데이트 2. 설계 추후 업데이트 3. 구현 package implemented; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; class Node { public Object obj; public Node next; public Node() {} public Node(Object obj) { this(obj, null); } public Node(Object obj, Node next) { this.obj = obj; this.next = next; } } public class MyLinkedList { public Node root; public int si..

1. 분석추후 업데이트 2. 설계추후 업데이트3. 구현 // 외부 패키지에서 테스트 진행, 따라서 public 으로 열어둠 public class MyVector { public Object[] elements; public int size; // 현재 객체 배열에서 객체 개수 public int capacity; // 현재 객체 배열의 용량(크기) public int capacityIncrement; // 확장 단위, 해당 값이 0이면 더블링, 그렇지 않으면 확장 단위만큼 확장 public MyVector() { this(10); } public MyVector(int capacity) { elements = new Object[capacity]; size = 0; this.capacity = capa..

알고리즘을 공부하기 시작하면 가장 먼저 공부하게될 알고리즘은 브루트포스 알고리즘이다 그 이유는 가장 쉽고 기본이되는 알고리즘이기 때문이다. 이제 브루트포스 알고리즘에 대해 공부해보자 1. 브루트포스 알고리즘이란? 문제에서 발생하는 모든 경우의 수를 따져서 정답을 구하는 방식이다. 그래서 코드 상에 실수만 없으면 모든 문제를 풀수 있다. 즉 정확도가 100%인 알고리즘이다 하지만, 모든 경우를 따져서 장답을 구하기 때문에 성능이 매우 안좋다. 그래서 브루크 포스 알고리즘을 적용하기 전에 제한시간내에 풀 수 있는지 반드시 확인해야한다. 제한시간 내에 풀 수 있는지 확인해 보려면 문제에서 제시한 제한시간이 몇 초인지 확인한 다음 해당 시간내에 실행될 수 있는 최대 시간 복잡도를 구한다. 이때 문제에서 제시한 ..

https://www.acmicpc.net/problem/13164 13164번: 행복 유치원 행복 유치원 원장인 태양이는 어느 날 N명의 원생들을 키 순서대로 일렬로 줄 세우고, 총 K개의 조로 나누려고 한다. 각 조에는 원생이 적어도 한 명 있어야 하며, 같은 조에 속한 원생들은 서로 www.acmicpc.net 1. 문제 설명 N명의 원생들을 키 순서대로 일렬로 줄 세우고, 총 K개의 조로 나누려고 한다 같은 조에 속한 원생들은 서로 인접해 있어야 한다 조마다 티셔츠를 맞추는 비용은 조에서 가장 키가 큰 원생과 가장 키가 작은 원생의 키 차이만큼 든다 최대한 비용을 아끼고 싶어 하는 태양이는 K개의 조에 대해 티셔츠 만드는 비용의 합을 최소로 하고 싶어한다. 태양이를 도와 최소의 비용을 구하자. 2..

https://www.acmicpc.net/problem/20365 20365번: 블로그2 neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한 www.acmicpc.net 1. 문제 설명 이때, 모든 문제를 원하는 색으로 칠할 때까지 필요한 작업 횟수의 최솟값을 출력하라 위 예시의 정답은 1~7번 문제를 파란색, 3번을 빨간색, 5번을 빨간색, 8번을 빨간색으로 순서대로 칠한다면 작업 횟수는 4번이다. 2. 접근법 처음에는 가장 많이 색을 칠해야 하는 것을 한번에 칠하고 그 이후에 각 문제를 하나씩 색칠해 가는 방식으로 풀었음 하지만, 문제 요구 사항 중 하나는 ..

https://www.acmicpc.net/problem/2294 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어 www.acmicpc.net 1. 문제 설명 n 가지 종류 동전이 있고 각 동전들은 가치가 주어진다 이 동전들을 사용해서 k원을 만들때 사용한 동전의 최소 개수를 출력해라 2. 접근법 내 포스팅 글 중에 "동전1" 문제 풀이가 있다 그 문제와 상당히 유사하다 그래서, dp 알고리즘을 사용해서 풀 수 있다 즉, 분할 할 수 있는 하위 문제들 중에서 최소값 + 1이 현재 만드려는 가치의 값이된다 ..

https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 1. 문제 설명 n가지 종류의 동전이 있다. 각 동전이 나타내는 가치는 다르며 각각의 동전은 몇 개라도 사용할 수 있다 이때, k원(가치)가 되도록 만들 수 있는 경우의 수를 구해라 사용한 동전의 순서만 다른 것은 같은 경우이다 2. 접근법 이 문제는 dp 알고리즘으로 풀었다 dp 알고리즘으로 문제를 풀려면 확인해야 하는 중요한 것들이 있다 그 중에 하나는 상위 문제를 하위 문제들로 분할 가능하며 ..