2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
처음 이문제를 보고
1. N값을 5로 나눈값을 몫변수에 저장한다.
2. N값을 5로 나눈 나머지값은 나머지변수에 저장한다.
3. 나머지값을 3으로 나눈 값을 변수에 저장하고
4. 5로 나눈 몫변수와 나머지값을 3으로 나눈 값의 합을 저장한다.
5. 만약 5로 나눈 나머지변수가 3의 배수가 아니라면 -1을 출력한다.
6. 그렇지 않다면 5로나눈 몫변수와 나머지값을 3으로 나눈 값의 합을 출력한다.
package test;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
System.out.println("몇 킬로 필요한가여 ? ");
Scanner scanner =new Scanner(System.in);
int n = scanner.nextInt();
int five_quotient = n/5;
int five_Remainder = n%5;
int three_num = five_Remainder/3;
int finaln = five_quotient+three_num;
if(!(five_quotient%3==0)) {
System.out.println("-1");
}
else {
System.out.println(finaln);
}
}
}
내 생각에는 이렇게 하면 될줄 알았지만 N의 값이 3의배수일때 오류가 발생한다...
6을 입력했을때 바로 5로 나눠버려서 -1 값을 출력해버린다.
최소의 개수를 맞추기위해 5로나눈다는 생각이 짧았다!!!!
또 다시도전했을때 11을 입력했을때 -1 값이 출력되었다.
5a+3b 형식의 경우도 있고 최소를 구해야 한다. 다시 처음으로 돌아가서 생각하기위해
구글링..!
구글링을 열심히 해본 결과 표를 그려서 규칙을 찾자는 결론에 도달하였다.
처음 해온 생각을 그대로 가져와 무슨 수든 5로 나눠야 최소를 가질 수 있기에 5를 이용한 표를 그렸다.
한글로 하나하나 만든 표이다!.
이 표를 작성하면서 나온 규칙을 정리하자면
5로 나눈 나머지값은 항상 0~4까지의 수이다.
나머지값을 기준으로
1. 나머지가 0일때 봉지의 수 = n/5의 몫
2. 나머지가 1일때 봉지의 수 = n/5의 몫+1
3. 나머지가 2일때 봉지의 수 = n/5의 몫+2
4. 나머지가 3일때 봉지의 수 = n/5의 몫+1
5. 나머지가 4일때 봉지의 수 = n/5의 몫+2
라는 규칙을 찾아냈다
package test;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n = sc.nextInt();
sc.close();
if(n==4||n==7||n==1||n==2) {
System.out.println("-1");
}
else if(n%5==0) {
System.out.println(n/5);
}
else if(n%5==1||n%5==3) {
System.out.println(n/5+1);
}
else if(n%5==2||n%5==4) {
System.out.println(n/5+2);
}
}
}
수많은 트라이 끝에..! ㅠㅠㅠ 흐뭇하다!
'알고리즘 with 자바 > 그리디' 카테고리의 다른 글
백준 2217 : 로프 - JAVA (0) | 2021.03.17 |
---|---|
백준 1541 : 잃어버린 괄호 - JAVA (0) | 2021.03.16 |
백준 5585 : 거스름돈 - JAVA (0) | 2021.03.16 |
백준 11047 : 동전 0 - JAVA (0) | 2021.02.16 |
백준 11399 : ATM - JAVA (0) | 2021.02.16 |