✔ 학부 연구생 민상[백준 21922]코드 구현하기/* * 문제 분석하기 * : 물건의 종류에 따라서 바람의 방향을 바꿔가며 이동할 수 있는 모든 위치의 개수를 구하도록 함 *//* * 손으로 풀어보기 * 1. 에어컨의 위치에서부터 상하좌우로 이동하도록 함 * 2. 물건 1일 때, 바람 방향이 상 또는 하라면 같은 방향으로 이동할 수 있음 (좌 또는 우라면 이동 불가) * 3. 물건 2일 때, 바람 방향이 좌 또는 우라면 같은 방향으로 이동할 수 있음 (상 또는 하라면 이동 불가) * 4. 물건 3일 때, 바람 방향이 상우하좌라면 우상좌하 방향으로 이동할 수 있음 * 5. 물건 4일 때, 바람 방향이 상우하좌라면 좌하우상 방향으로 이동할 수 있음 * 6. 물건의 종류에 따라서 바람의 방향을 바꿔가며 이..
✔ 배[백준 1092]코드 구현하기/* * 문제 분석하기 * : 크레인은 1분에 박스를 하나씩 실을 수 있으므로, 가장 큰 무게를 들 수 있는 크레인이 가장 큰 무게를 들도록 함 *//* * 손으로 풀어보기 * 1. 크레인과 박스의 무게를 내림차순으로 정렬 * 2. 가장 큰 무게의 박스를 가장 큰 무게를 들 수 있는 크레인에 할당하도록 하는 것을 반복 * 3. 모든 크레인을 사용했을 때 시간을 1분 증가하고 다시 처음부터 크레인에 박스를 할당하도록 함 * 4. 이를 반복하여 모든 박스를 옮기도록 함 * 5. 만약 가장 큰 무게의 박스가 가장 큰 무게를 들 수 있는 크레인의 무게보다 크다면 모든 박스를 배로 옮길 수 없으므로 -1을 출력 *//* * 1092) 배 */public class Main { ..
✔ 트리의 지름[백준 1967]코드 구현하기/* * 문제 분석하기 * : DFS 탐색을 통해 루트 노드에서부터 가장 먼 노드를 찾은 후, 그 노드로부터 가장 먼 노드를 찾아 지름을 찾도록 함 *//* * 손으로 풀어보기 * 1. DFS 탐색을 통해 루트 노드에서부터 가장 먼 노드 찾기 * 2. 그 노드로부터 가장 먼 노드를 찾아 지름 출력 *//* * 1967) 트리의_지름 */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int n; static ArrayList[] tree; // tree(트리 데이터 저장 인접 리스트) sta..
✔ 사촌[백준 9489]코드 구현하기/* * 문제 분석하기 * : k와 조부모는 같으면서 부모는 다른 노드들의 개수를 찾도록 함 *//* * 손으로 풀어보기 * 1. 각 노드에 따른 부모 노드의 인덱스 위치를 저장하도록 함 * 2. k와 조부모는 같으면서 부모는 다른 노드들의 개수를 찾도록 함 * 3. 사촌의 수를 출력 * 4. n과 k가 둘 다 0일 경우 종료 *//* * 9489) 사촌 */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int n, k; static int[] node; // node(노드의 정보를 저장하는 배열) ..
✔ 문제 추천 시스템 Version 2[백준 21944]코드 구현하기/* * 문제 분석하기 * : 추천 문제 리스트를 TreeSet에 저장한 후, 명령에 따라 문제를 추천, 추가, 제거하도록 함 * 이를 위해 TreeSet의 last(), first(), ceiling(), lower() 메소드를 사용하도록 하며 * 각 알고리즘인 G에 대해서는 각 서브트리를 만들어서 알고리즘 별로 정렬해주도록 함 *//* * 손으로 풀어보기 * 1. recommend G x일 경우, * TresSet에 있는 문제들을 알고리즘 G에 따라서 분리하여 서브트리를 만든 후 TreeSet의 last(), first() 메소드를 사용해 문제 번호를 출력 * 2. recommend2 x일 경우, * Tre..
✔ 종이 조각[백준 14391]코드 구현하기/* * 문제 분석하기 * : 현재의 위치에서 자기 자신과 가로 칸을 추가해 자르거나, * 자기 자신과 세로 칸을 추가해 자르거나 * 둘 다 추가하지 않고 자기 자신만 자르는 것을 반복하여 완전 탐색하며 * 얻을 수 있는 가장 큰 점수를 구하도록 함 *//* * 손으로 풀어보기 * 1. 종이 조각의 크기에 따라 종이 조각의 수를 저장 * 2. 현재 위치의 종이 조각을 이미 사용했을 경우 넘어가도록 함 * 3. 현재 위치의 종이 조각을 사용하지 않았을 경우, * 자기 자신만 잘라 조각을 만들거나, * 자기 자신과 가로 조각을 붙여 조각을 만들거나, * 자기 자신과 세로 조각을 붙여 조각을 만드는 것을 반복하여 조각의 합을 최대로 ..
✔ 괄호 추가하기[백준 16637]코드 구현하기/* * 문제 분석하기 * : 괄호 안에 하나의 연산자만 들어가도록 하여 식의 결과의 최댓값을 구해야하므로 * 이전까지의 결과 값에 이번 연산을 할 때 괄호를 넣은 것과 넣지 않은 것의 결과를 구하도록 반복하여 최댓값을 구하도록 함 *//* * 손으로 풀어보기 * 1. 괄호를 넣지 않을 경우 이전까지의 계산 값과 현재의 수에 대해 계산하도록 함 * 2. 괄호를 넣을 경우 현재의 수와 다음 수에 대해 먼저 계산한 후 이를 이전까지의 계산 값과 계산하도록 함 * 3. 모든 연산자를 살펴봤다면 식의 결과의 최댓값을 갱신하도록 함 * 4. 이를 반복하여 괄호를 넣거나 넣지 않는 경우에 대해 모두 반복하여 최댓값을 찾아 출력함 *//* * 16637) 괄호_추..