알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://www.acmicpc.net/problem/2839
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
Think🤔
package back23y02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SugarDelivery {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int sugar = Integer.parseInt(bf.readLine());
int answer = 0;
int three = 3;
int five = 5;
if(sugar % five == 0) { // 5로 딱 나눠질 때 가장 최적
answer += sugar / five;
}else if((sugar % five) % three == 0) { // 5로 나누고 3으로 나눠질 때 그다음 최적
answer += sugar / five;
answer += (sugar / five) / three;
}else if((sugar % three) % five == 0){
answer += sugar / three;
answer += (sugar / three) / five;
}else if(sugar % three == 0) { // 3으로 나눠질 때
answer += sugar / three;
}else { // 그 외 안나눠 지면 -1 출력
answer = -1;
}
System.out.println(answer);
}
}
중간 중간 5 , 3 을 나눠 떨어지는 반복문을 계속해서 조건을 추가시키고 없애는 방법으로 했다.
그럴려다 보니 그러면 5가 몇번 들어가는지 3이 몇번 들어가는지를 구해야 하기 때문에 더 복잡해지고 구할 수 있는지도 의문이 들었다.
이걸 수학적 방식으로 들어가서
3이랑 5를 더해서 나타낼 수 있는 숫자가 아닌 1,2,4,7 값이 나오면 -1을 리턴하게 해줬고,
5로 나눌 수 없어지면 -3으로 깎으면서 +1을 해줬다.
이렇게 되면 8일 경우에도 5로 나누고 3을 깎아줘서 0이 돼서 if문을 안타고 answer에 제대로 된 값을 넣어서 리턴을 해 줄 수 있다.
큰 값인 5로 나누는게 일단 최적의 방법이 맞고,
그 다음 3을 구하는 방법을 -1으로 없애면서 구하는 방법이였다.
Solution✍
package back23y02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SugarDelivery {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int sugar = Integer.parseInt(bf.readLine());
int answer = 0;
while(true) {
if(sugar == 4 || sugar == 7 || sugar == 1 || sugar == 2) {
answer = -1;
break;
}
if(sugar % 5 == 0) {
answer += sugar / 5;
break;
}else { // 안나눠 떨어지면 -3 해서 횟수 증가 시키고 5로 다시 나눔 근데 그게 4나 7이면
sugar-=3;
answer++;
}
}
System.out.println(answer);
}
}
Review🤩
빠르게 풀 수 있다고 자만했지만, 그렇게 쉬운 문제는 아니였다.
'Algorithm' 카테고리의 다른 글
[백준] 추월 (0) | 2022.03.08 |
---|---|
[백준] 연속부분최대곱 (0) | 2022.03.01 |
[백준] 숫자의 합 (0) | 2022.02.28 |
[인프런] 아나그램(해쉬) (0) | 2022.02.27 |
[백준] 일곱 난쟁이 (0) | 2022.02.27 |