티스토리 뷰
문제
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.
문제는 상근이가 설탕을 구매하는데
18KG를 구매한다면 3KG, 5KG 설탕 봉지로 나누어서 봉지를 최소한으로 가져갈 수 있는가에 대한 문제입니다.
제가 작성한 코드를 설명하기 전에 인터넷에 많은 해답 코드를 보겠습니다.
해답 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sugar = sc.nextInt();
int count = 0;
while(sugar > 0) {
if(sugar % 5 == 0) {
count += sugar / 5;
System.out.println(count);
return ;
}
if(sugar < 3) {
System.out.println(-1);
return ;
}
sugar-=3;
count++;
}
System.out.println(count);
}
}
로직은 while문을 통한 반복입니다.
5로 나누어지는가 판단을 하고 나누어 지지 않는다면 3을 계속해서 빼면서
반복하게 됩니다.
만약 18KG이라면 첫번째에서는 5로 나누어 지지 않아
-3을 뺀 15KG이 다음으로 넘어가는 형식입니다.
다음이 15KG이기에 성공적으로 count가 나올 것입니다.
이번에는 제가 작성한 코드입니다.
필자가 작성한 코드
class Main {
public static void main (String[] args) throws java.lang.Exception {
Scanner in = new Scanner(System.in);
int pay = in.nextInt();
int mount = -1;
for(int i=pay/5; i>=0; i--){
for(int j=0; j<=(pay-5*i)/3; j++){
if(i*5+j*3==pay){
mount = i+j;
break;
}
}
if(mount != -1) break;
}
System.out.print(mount);
}
}
저는 mount에 대한 기초값을 -1을 두었습니다.
if(sugar < 3) {
System.out.println(-1);
return ;
}
위에 대한 예외처리를 안해도 됩니다.
그리고 차별점으로 저는 for문을 사용했습니다.
첫번째 for문에서는 5KG에 대한 갯수를 파악합니다.
두번째 for문에서는 3KG에 대한 갯수를 파악합니다.
정답을 찾았을 시 for문을 끝내기 위해서 break를 2개를 사용합니다.
for문 하나 당 하나입니다.
두 코드를 직접 실행해서 백준 결과로 성능 비교를 하게 되면
while문이 조금 더 속도가 빠르게 나옵니다.
'일상 > 코드 챌린지' 카테고리의 다른 글
백준 3009 네 번째 점[JAVA] (0) | 2024.10.17 |
---|---|
백준 9506 약수들의 합 [JAVA] (1) | 2024.10.16 |
백준 2292 벌집 (JAVA) (0) | 2024.10.15 |
백준 2745 진법 변환 (0) | 2024.10.14 |
백준 2566 최대값 [JAVA] (1) | 2024.10.13 |
- Total
- Today
- Yesterday
- 정보처리기사
- docker
- 공공데이터포탈
- 그린대학교
- JWT
- 국비
- CSS
- 국비교육
- java
- Git
- 국비지원
- 인텔리제이
- post-redirct-get
- 덱
- wsl
- 메시지 오류
- 백준
- JPA
- MySQL
- 김영한
- form
- 해시
- Queue
- 자료구조
- static
- (롯데)기업맞춤형 프로젝트
- 오류
- 스택
- 프로그래머스
- deque
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |