알고리즘 문제풀이/자바 9

[프로그래머스-그리디] 조이스틱 JAVA 자바

https://school.programmers.co.kr/learn/courses/30/lessons/42860 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👉 풀이 public class p42860 { // https://school.programmers.co.kr/learn/courses/30/lessons/42860 public int solution(String name) { int answer = 0; int len = name.length(); int move = len-1; // 좌우 움직임 최소 값 for(int i = 0; i < l..

[프로그래머스-그리디] 큰 수 만들기 JAVA 자바

https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👉 풀이 숫자를 지워서 만들어야 하므로, number.length() - k 자리수가 보장되도록 한 상태에서 큰 수를 만들어야 한다. 보장되어야할 자릿수를 남겨두고, 나머지 부분에서 최대값을 찾는다. 그 값을 answer의 앞자리수부터 이어 붙인다. 예를 들어 number = "4177252841", k=4 현재 뽑아얄할 숫자는 6개이므로, 1개를 뽑더라도 무사히 6자리를 만들 수 있도록 numb..

[프로그래머스-그리디] 체육복 JAVA 자바

https://school.programmers.co.kr/learn/courses/30/lessons/42862 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👉 풀이 최대한 많은 학생이 체육 수업을 듣게 하기 위해서는 적은 번호를 가진 학생끼리 먼저 체육복을 빌려주고 빌려야 한다. 따라서 lost, reserve 배열 오름차순 정렬한다. 정렬 후 체육복을 빌려주기 위해 배열 탐색 탐색 전 여분의 체육복이 있는 사람의 체육복이 도난 당했을 경우, 여분의 체육복을 다른 사람에게 빌려줄 수 없으므로 -1 값을 대입해 필터링한다. lost와 reserve를 ..

[프로그래머스-그리디] 구명보트 JAVA 자바

https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👉 풀이 구명보트를 최대한 적게 사용할려면 가장 몸무게가 큰 사람 + 가장 몸무게가 작은 사람 조합이어야 한다. (보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없다는 제한이 있다) public int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); int length = people.length; int min_..

[백준-그리디] 13305: 주유소 JAVA 자바

https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 👉 풀이 비용이 적은 곳에서 최대한 많이 주유하면 된다. 첫번째 도시에서는 적어도 두번째 도시까지 거리만큼은 주유해야한다. 초기 최소가격은 첫번째 도시에서의 주유가격이 된다. 두번째 도시부터 도시를 이동해가면서 주유가격이 현재 최소 가격보다 작으면 최소가격을 갱신해가면서, (현재 도시에서 다음 도시까지 거리) * 최소 주유 가격 을 더해나간다. N(2 ≤ N ≤ 100,000) 이므..

[백준-그리디] 11399: ATM JAVA 자바

https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 👉 풀이 각 사람이 돈을 인출하는데 필요한 시간은 그 사람의 앞 사람들이 돈을 인출하는데 걸리는 시간의 누적합이다. 따라서 돈을 인출하는데 걸리는 시간이 적은 사람부터 돈을 인출하면, 각 사람이 돈을 인출하는데 필요한 시간의 합이 최소가 된다. 1 ~ N 번까지 사람을 돈을 인출하는데 걸리는 시간이 적은 사람부터 정렬 누적합을 계속 더해간다. import java.io.BufferedReader; import java.io.I..

[백준 - 그리디] 1541: 잃어번린 괄호 JAVA 자바

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 👉 풀이 최솟값을 만들기 위해서는 큰수를 빼주어야한다 => 덧셈으로 이루어진 부분을 먼저 계산한뒤 덧셈결과를 빼준다. 뺄셈이 덧셈보다 뒤에 있는 경우 먼저하고 더하나 더하고 빼나 똑같음 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.String..

[백준-그리디] 1931: 회의실 배정 JAVA 자바

https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 👉 '활동 선택 문제(Activity Selection problem) 시간표를 최대한 많이 배정하거나 선택하는 문제 한 사람이 하나의 활동에 대해서만 작업할 수 있을 때 최대한 많은 활동을 할 수 있는 수를 선택하는 문제 '한 사람이 하나의 활동에 대해서만 작업할 수 있다.' 하나의 활동을 완료하기 전까지는 다른 활동을 선택할 수 없다. 하나의 활동을 선택하면 나머지 겹치지 않는 활동에 대해서 독립적이고, 탐욕 선택 이후의 결과에 영향을 미치지 않는다. 👉 풀이 '이전 선택의 종료 시간' 과 '이후 선택의 시작..

[백준-그리디] 11047번: 동전0

https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 풀이: k원을 만드는데 필요한 동전 개수의 최솟값을 구해야 하므로 큰 단위의 동전부터 N원을 만드는데 사용하면 된다. 코드: import java.util.Scanner; //https://www.acmicpc.net/problem/11047 public class p11047 { public static void main(Strin..