본문 바로가기
반응형

그리디10

[백준] 11497번 - 통나문 건너뛰기(Java)(○) https://www.acmicpc.net/problem/11497 11497번: 통나무 건너뛰기 남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이 www.acmicpc.net 1. 오름차순 정렬을 한다. 2. 가장 큰 기둥을 중간에 배치하고 그 다음 큰 기둥은 오른쪽에, 그 다음 큰 기둥은 왼쪽에 배치한다. 3. 이런 식으로 마지막까지 배치를 완료한다. 4. ArrayList A는 오른쪽에 배치하는 기둥을 넣고, ArrayList B는 왼쪽으로 배치하는 기둥을 넣도록 한다. 5. 가장 큰 수는 A와 B 모두 집어넣는다. 6. 그 다음 수부터 번갈아가면서 A, B에 집.. 2023. 5. 31.
[백준] 1946번 - 신입사원 (Java)(○) https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net [문제접근] 입력값이 점수가 아니라 순위라는 것을 이해하지 못해서 한참을 헤맸다. 먼저 직원을 선발하지 않는 조건을 잘 살펴보자. * 선발하지 않는 조건 1. 서류순위와 면접순위가 더 높은 지원자가 있다면 그 지원자는 떨어진다. 2. 서류순위를 기준으로 오름차순 정렬을 하면, 자기보다 서류순위가 떨어지는 사람들은 비교할 필요가 없다. 3. 나보다 서류순위가 높음 지원자의 면접.. 2023. 5. 30.
[이코테][기출] 05. 볼링공 고르기 A, B 두 사람이 볼링을 치고 있습니다. 두 사람은 서로 무게가 다른 볼링공을 고르려고 합니다. 볼링공은 총 N개가 있으며 각 볼링공마다 무게가 적혀 있고, 공의 번호는 1번부터 순서대로 부여됩니다. 또한 같은 무게의 공이 여러개 있을 수 있지만, 서로 다른 공으로 간주합니다. 볼링공의 무게는 1부터 M까지의 자연수 형태로 존재합니다. 문제 N개의 공의 무게가 각각 주어질 때, 두 사람이 볼링공을 고르는 경우의 수를 구하는 프로그램을 작성하세요. 입력 조건 첫째 줄에 볼링공의 개수 N, 공의 최대 무게 M이 공백으로 구분되어 각각 자연수 형태로 주어집니다. (1 2022. 10. 18.
[이코테][기출] 04. 만들 수 없는 금액 N개의 동전이 주어질 때 조합으로 만들 수 없는 양의 정수금액 중 최솟값을 구해야 한다. 1. for (i=1 to 1,000,000)으로 정수를 하나씩 증가시킨다. 2. N개의 동전을 순서대로 빼본다. (미리 오름차순 정렬을 해놓고 큰수부터 빼자.) 3. 빼서 0이되면 만들 수 있는 정수이므로 i를 증가시킨다. 4. 빼서 0보다 크면 나머지를 계속 뺀다. 5. 빼서 음수면 다음 수를 뺀다. 6. 다 빼도 수가 남아 있으면 정답 import java.util.Scanner; import java.util.Arrays; // [이코테](그리디) 04. 만들 수 없는 금액 public class Main { static int N; static int A[]; public void InputData() { .. 2022. 10. 18.
[이코테][기출] 03. 문자열 뒤집기 모든 숫자를 전부 같게 만드는 것이 목적이다. 따라서 전부 0으로 바꾸는 경우와 전부 1로 바꾸는 경우 중 더 적은 횟수를 가지는 경우를 구하면 된다. 모두 0으로 만드는 경우 모두 1로 만드는 경우 두번째 숫자부터 그 다음 숫자랑 비교를 해서 수가 달라지면 count를 증가시킨다. import java.util.Scanner; // [이코테](그리디) 03. 문자열 뒤집기 public class Main { static int A[]; static int count0 = 0; // 전부 0으로 바꾸는 경우 static int count1 = 0; // 전부 1로 바꾸는 경우 public void InputData() { Scanner sc = new Scanner(System.in); String s .. 2022. 10. 18.
[이코테][기출] 02. 곱하기 혹은 더하기 숫자 문자열의 왼쪽부터 오른쪽까지 하나씩 숫자끼리 연산을 해서 가장 큰수를 구하라. 연산은 '+'와 'x' 두개만 사용할 수 있다. 모든 연산은 왼쪽부터 순서대로 이루어진다. 문자열을 정수형 배열에 변환해서 담는다. for문으로 숫자를 하나씩 확인하면서 만약 0이면 다음에 '+', 아니면 'x'를 오게해서 Queue에 저장한다. 다음 for문으로 큐에서 연산자를 하나씩 빼면서 숫자 연산을 해서 ans에 누적시킨다. ----------------------------------------------------------------------------------------------- 첫번째 수는 ans 변수에 저장한다. 그 뒤 숫자부터 for문을 돌리면서 두 수중 하나라도 1이나 0이면 두 수를 '+' .. 2022. 10. 18.
[이코테][기출] 01. 모험가 길드 모험가가 N명 있다. 공포도가 X인 모험가는 반드시 X명 이상의 모험가 그룹이 필요하다. 최대 몇명의 모험가 그룹을 만들 수 있는가? 배열 A[N]을 정의해서 공포도를 저장한다. 오름차순으로 정렬한다. for (i = N to 0) A[N]의 공포도만큼 i를 전진하고, count++한다. (10분 걸림) 오름차순으로 정렬하는 것까지는 생각함. 하지만 공포도가 낮은 것부터 확인해서 일단 그룹에 모험가를 포함시키고 그 수와 현재 확인중인 공포도를 비교하는 로직은 생각하지 못함. --------------------------------------------------------------------------------------------- 공포도를 기준으로 오름차순으로 정렬을 한다. 공포도가 낮은 모험가.. 2022. 10. 18.
[백준] 1931번 - 회의실 배정 (Java)(○) https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net [첫번째] N개의 회의가 주어지고, 각 회의마다 시작시간과 끝나는 시간이 주어진다. 각 회의가 겹치지 않게 하면서 최대한 많이 회의를 사용할 수 있는 개수를 구하라. 회의의 시작시간과 끝나는 시간이 같을 수 있다. 그리디 알고리즘으로 접근하자. class를 선언해서 시작시간과 끝나는 시간을 저장하자. 이 클래스 배열을 끝나는 시간 기준으로 오름차순 정렬을 하자. 루프를 돌리면서 지금 회의의 끝나는 시간과 다음 회의의 시작 시간을 비교하자. 다음 회의의 시작 시간이 같거나 더 크면 회의 갯수를 누적합 시킨다. 선택.. 2022. 10. 11.
[백준] 1541번 - 잃어버린 괄호 (Java) 1. 첫번째 수는 무조건 양수가 온다고 했으니 그 수에서 뺀값이 가장 작으려면 뒤에 -가 붙는 수가 가장 큰수여야 한다. 2. - 기호가 나오면 그 뒤로 나오는 수들을 모두 더해서 음수로 된 최대값을 만들어야 한다. 3. - 기호가 나오기 전까지의 숫자는 계속 더해주다가 - 기호가 나오면 거기서 괄호를 쳐서 모두 더해서 빼면 된다. ex) 55-50+40 = 55 - (50 + 40) = 55 - 90 = -35 10+55-50+40 = 10+55 - (50+40) = 65 - 90 = -25 1. 3개의 구현이 필요하다. 1-1. 입력 받은 문자열을 -를 기준으로 잘라서 문자열 배열에 담는 작업 1-2. 자른 문자열을 +를 기준으로 수를 뽑아내어서 더하는 작업 1-3. 각 취합된 수를 빼는 작업 2. .. 2022. 9. 19.
반응형