Coding Test/Java 알고리즘 실전

Coding Test/Java 알고리즘 실전

[15686] 치킨 배달

✔ 치킨 배달[백준 15686]코드 구현하기/* * 문제 분석하기 * : 폐업 시키지 않을 치킨 집을 M개 구하는 모든 경우의 수에 따라, 도시의 치킨 거리를 구해 가장 작은 값을 구하도록 함 *//* * 손으로 풀어보기 * 1. 집과 치킨집의 좌표 정보를 저장하기 * 2. 치킨 집을 M개 선택한 후, 그 치킨 집에 따른 도시의 치킨 거리 구하기 * 3. 이를 반복하여 가장 작은 도시의 치킨 거리 값을 구하여 출력하기 *//* * 15686) 치킨_배달 */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int N, M; static Lis..

Coding Test/Java 알고리즘 실전

[2212] 센서

✔ 센서[백준 2212]코드 구현하기/* * 문제 분석하기 * : 각 센서들을 K개의 그룹으로 나눌 때 수신 가능 영역의 길이의 합을 최소화하도록 함 * 이를 위해 각 센서들의 좌표를 정렬한 후, N - K개의 거리 차이를 무시하여 제외한 후 나머지의 합을 구해줌 * * 예) N = 6 (1, 6, 9, 3, 6, 7), K = 2일 때 * 각 센서들의 위치는 1, 3, 6, 6, 7, 9이므로 센서들끼리의 거리 차이는 2, 3, 0, 1, 2가 되므로 * 1, 3 / 6, 6, 7, 9로 그룹을 나누면 집중국의 수신 가능 영역의 길이의 합은 2 + 3이므로 5가 됨 *//* * 손으로 풀어보기 * 1. 각 센서들의 좌표를 정렬 * 2. 각 센서들의 거리 차이 구하기 * 3. N -..

Coding Test/Java 알고리즘 실전

[2960] 에라토스테네스의 체

✔ 에라토스테네스의 체[백준 2960]코드 구현하기/* * 문제 분석하기 * : 에라토스네테스의 체를 활용해 N까지의 수에 대한 소수를 구하며, K번째 지우는 수를 구하도록 함 *//* * 손으로 풀어보기 * 1. 구하고자 하는 소수의 범위만큼 1차원 배열을 생성 * 2. 1은 소수가 아니므로 2부터 시작하여 현재 선택된 숫자와 그의 배수에 해당하는 수를 지워나감 * 3. 이를 반복하며 K번째 지워지는 수를 구하도록 함 *//* * 2960) 에라토스네테스의_체 */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int N, K; static ..

Coding Test/Java 알고리즘 실전

[5347] LCM

✔ LCM[백준 5347]코드 구현하기/* * 문제 분석하기 * : 두 수의 최대 공약수를 구해 최대 공배수를 구하도록 함 *//* * 손으로 풀어보기 * 1. 두 수의 최대 공약수를 구하도록 함 * 2. 이를 이용해 두 수의 곱을 최대 공약수로 나눠 최대 공배수를 구하도록 함 * 3. 최소 공배수를 출력함 *//* * 5347) LCM */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static long a, b; static long answer = 0; // answer(두 수의 최소공배수) /* * 데이터 준비하기 */ ..

Coding Test/Java 알고리즘 실전

[20924] 트리의 기둥과 가지

✔ 트리의 기둥과 가지[백준 20924]코드 구현하기/* * 문제 분석하기 * : DFS 탐색을 통해 루트 노드부터 기가 노드까지의 길이와 기가 노드부터 리프 노드의 길이들을 구하도록 함 *//* * 손으로 풀어보기 * 1. 루트 노드부터 시작해서 탐색하면서 * 처음 자식 노드가 2개 이상인 노드(기가 노드)를 만나거나 * 리프 노드가 단 1개인 노드를 만나거나 * 루트 노드가 동시에 기가 노드인 경우라면 간선 길이를 구하도록 함 * 2. 이후 기가 노드부터 시작해 리프 노드까지 탐색하며 가장 긴 간선 길이의 합을 구하도록 함 * 3. 구한 트리의 기둥과 가장 긴 가지의 길이를 출력함 *//* * 20924) 트리의_기둥과_가지 */public class Main { stati..

Coding Test/Java 알고리즘 실전

[21942] 부품 대여장

✔ 부품 대여장[백준 21942]코드 구현하기/* * 문제 분석하기 * : 회원 닉네임과 부품 이름에 따른 대여 시간을 저장한 후, * 같은 회원 닉네임과 부품 이름을 가진 정보가 또 다시 들어온다면 두 시각을 계산해 벌금을 계산하도록 함 *//* * 손으로 풀어보기 * 1. 회원 닉네임과 부품 이름에 따른 대여 시간을 저장 * 2. 같은 회원 닉네임과 부품 이름을 가진 정보가 또 다시 들어온다면 두 시각을 계산해 벌금을 계산 * 3. 벌금을 내야하는 사람들을 사전순으로 정렬하여 출력 * 만약 벌금을 내야하는 사람들이 없을 경우는 -1을 출력 *//* * 21942) 부품_대여장 */public class Main { static BufferedReader br = new Buffer..

Coding Test/Java 알고리즘 실전

[1918] 후위 표기식

✔ 후위 표기식[백준 1918]코드 구현하기/* * 문제 분석하기 * : 연산자 우선 순위에 맞춰 후위 표기식으로 변환하도록 조건식을 세우도록 함 *//* * 손으로 풀어보기 * 1. 연산자 우선 순위에 맞춰 후위 표기식으로 변환하도록 조건식으로 세우도록 함 * 피연산자일 경우, 바뀐 식에 추가하도록 함 * 연산자일 경우, '('라면 스택에 추가 * '*, /'라면 자신과 우선순위가 같으며 앞에 있는 연산자를 꺼내 바뀐 식에 추가하도록 함 * '+, -'라면 자신과 우선순위가 크거나 같으며 괄호 사이에 있는 연산자를 꺼내 바뀐 식에 추가하도록 함 * ')'라면 괄호 사이에 있는 연산자를 꺼내 바뀐 식에 추가하..

Coding Test/Java 알고리즘 실전

[1949] 우수 마을

✔ 우수 마을[백준 1949]코드 구현하기/* * 문제 분석하기 * : 우수 마을을 선정할 때, 인접한 마을에 우수 마을이 있다면 이번 마을을 우수 마을로 선정할 수 없으므로 * 선정 조건에 맞춰 인접한 마을을 탐색하면서 우수 마을의 조합에 따른 마을의 주민 수의 총 합을 구하도록 함 *//* * 손으로 풀어보기 * 1. 인접한 마을 정보를 저장 * 2. 인접한 마을 정보에 따라 첫 번째 마을이 우수 마을일 때와 우수 마을이 아닐 때로 시작하여 우수 마을의 조합을 탐색 * 3. 이전 마을이 우수 마을일 경우, 이번 마을은 우수 마을이 될 수 없음 * 이전 마을이 우수 마을이 아닐 경우에는, 이번 마을은 우수 마을이 될 수도 있고 안 될 수도 있음 * 이때 우수 마을로 선정되지 못한 ..