#1 알고리즘
0 ~ (N / 3)을 순회한다는 점에서 a는 음수일 수 없다. 하지만, b는 명시적으로 순회하는 게 아니라, a의 범위를 순회할 때 간접적으로 도출된다. 이 때, b가 혹여나 음수 값으로 계산되지 않을까 하는 우려가 있을 수 있다. 우려를 해소해보자면, a의 최댓값은 N / 3이다. 따라서 항상 (N - 3 * a) / 5 >= 0 이 성립한다. b = (N - 3 * a) / 5 이므로, b값은 음수일 수 없다.
#2 코드
#2-1 자바
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.nextLine();
sc.close();
int lowestBags = -1;
// 3*a + 5*b = N을 만족하는 a와 b값 찾기 시작
// a의 범위: 0 ~ N/3
int maxA = N / 3;
// a의 범위 순회하며, b값이 정수가 나오는 경우 밝혀내기
for(int a = 0; a <= maxA; a++) {
if((N - 3*a) % 5 == 0) {
int b = (N - 3*a) / 5;
// a + b 값이 현재까지의 나온 최솟값인지 확인 및 갱신
if(lowestBags == -1) {
lowestBags = a + b;
} else {
if(a + b < lowestBags) {
lowestBags = a + b;
}
}
}
}
System.out.println(Integer.toString(lowestBags));
}
}
#2-2 코틀린
fun main() {
val N = readln()!!.trim().toInt()
var lowestBags = -1
// 3*a + 5*b = N을 만족하는 a와 b값 찾기 시작
// a의 범위: 0 ~ N/3
val maxA = N / 3
// a의 범위 순회하며, b값이 정수가 나오는 경우 밝혀내기
for(a : Int in 0..maxA) {
if((N - 3*a) % 5 == 0) {
val b = (N - 3*a) / 5
// a + b 값이 현재까지의 나온 최솟값인지 확인 및 갱신
if(lowestBags == -1) {
lowestBags = a + b
} else {
if(a + b < lowestBags) {
lowestBags = a + b
}
}
}
}
println("${lowestBags}")
}
'문제 풀이 > 기타' 카테고리의 다른 글
[백준] 4949 (균형잡힌 세상) (0) | 2023.12.07 |
---|---|
[백준] 27522 (카트라이더: 드리프트) (0) | 2023.12.05 |
[백준] 9076 (점수 집계) (0) | 2023.12.02 |
[백준] 4153 (직각삼각형) (0) | 2023.11.30 |
[백준] 8958 (OX퀴즈) (0) | 2023.11.27 |