고민!
해당 문제는 5kg, 3kg에 대해 모두 고려해야 되는 문제였습니다. greedy!
처음에는 5kg으로 빼면 되겠지라고 생각했지만 정확하지 않으면 -1이라는 조건
이것을 해결하기 위해 N이 5000kg이라는 사실을 이용했습니다.
3kg의 최대 개수는 1333개라는 것! 그래서 1333부터 하나씩 빼면서 적용했습니다.
하지만 java로 적용할때에는 n을 5로 나눈 그 숫자가 몇개인지를 통해 5kg의 최대 숫자를 적용했습니다. 그리고 한개씩 빼주면서 3kg으로 나눠떨어지는지 확인하면 최소 개수로 떨어지는 개수를 알수 있었습니다.
python으로 적용했을 때,
size = int(input())
result = []
for i in range(1333,0,-1):
if (size - (5*i)) ==0:
result.append(i)
elif (size-(5*i)) >0 and ((size -(5*i))%3) ==0:
b = (size - (5*i))//3 + i
result.append(b)
elif (size - (3*i)) ==0:
result.append(i)
if result == []:
print('-1')
else:
want = min(result)
print(want)
java로 적용했을 때,
import java.io.*;
import java.util.*;
public class Main {
static int n;
static int total;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
int tmp = n / 5;
while(true) {
if(tmp < 0) {
total = -1;
break;
}
if ((n - 5 * tmp) % 3 == 0) {
total = tmp + (n - 5 * tmp)/3;
break;
}
tmp -= 1;
}
bw.write(String.valueOf(total));
bw.flush();
bw.close();
}
}
다만 시간이
java가 더 오래걸렸습니다. inport를 전체 다 해준것이 문제인것 같은데 이부분을 해결하기 위해 import를 다 외우는 것은 부담스럽고 이에 대해 고민중입니다.
오히려 java가 빠른 방법으로 푼것같은데..인 고민입니다..ㅠㅠ
'알고리즘' 카테고리의 다른 글
백준 1105 팔 (파이썬 풀이) (2) | 2024.01.23 |
---|---|
1563 개근상 파이썬으로 풀기 (0) | 2023.12.29 |
159993 미로탈출(프로그래머스) (0) | 2023.11.01 |
케빈 베이컨의 6단계 법칙 알고리즘 풀이 자바 (1) | 2023.10.10 |