-
[백준] 2839번 설탕 배달Algorithm Study/Python 2024. 7. 1. 23:23
https://www.acmicpc.net/problem/2839
풀이
이번 문제는 copliot을 활용하여 문제를 풀어봤다.
단순한 문제라면 질문을 잘하면 코드를 만들 수 있을 것 같았다.결과는 생각보다 놀랍게 2번의 질문 만으로 완성된 코드를 만들어냈다.
입력에 대한 부분은 일부 수정이 필요했지만 결과물을 잘 만들어서 생각보다 놀라웠다.
먼저 copliot에게 질문을 하기 위해서는 이 문제가 원하는 요구사항을 이해해야한다.
위 문제에서는 3과 5를 이용하여 입력받은 숫자를 만들 수 있는지 필요하고 그 숫자를 만들기 위해서는 3과 5를 최소로 사용한 값이 필요하다. 또 만들 수 없는 경우에는 -1을 출력하게 하였다. 그래서 위 조건으로 아래처럼 코드를 생성하였다.
내가 입력 받은 숫자 N이 3과 5의 합으로 만들 수 있는 숫자인지 판별한다. 3과 5를 사용한 갯수가 최소가 될 수 있게 구현하려고 하는데 3과 5의 합으로 만들 수 없는 숫자라면 -1을 출력하고 만들 수 있다면 사용된 3과 5의 갯수의 총합을 출력하는 코드를 작성하시오
def check_sum(n): if n < 3 or n == 4: return -1 count_3 = n // 3 while count_3 >= 0: remainder = n - (count_3 * 3) if remainder % 5 == 0: count_5 = remainder // 5 return count_3 + count_5 count_3 -= 1 return -1 # Test the function num = int(input()) result = check_sum(num) print(result)
위 처럼 코드를 만들어줬다.
위 코드의 문제점은 먼저 3을 검사하기 때문에 15와 같은 입력이 들어왔을 때 5*3으로 3개가 아닌 3*5로 5개가 나온다.
즉 만들 수 있는지는 판별할 수 있지만 최소값이 되지는 못한다.그래서 이번에는
사용한 3과 5의 합이 최소가 될 수 있게 수정해달라는 요구를 했다.def check_sum(n): if n < 3 or n == 4: return -1 count_5 = n // 5 while count_5 >= 0: if (n - (count_5 * 5)) % 3 == 0: count_3 = (n - (count_5 * 5)) // 3 break count_5 -= 1 if count_5 < 0: return -1 return count_3 + count_5 # Test the function number = int(input()) result = check_sum(number) print(result)
먼저 3으로 판별하던 것을 5로 판별하는 것으로 바뀌면서 사용한 3과 5의 합이 최소가 될 수 있게 구하였고
실제 수식은 N보다 작은 5의 배수 중 가장 큰 수(x)를 설정하고 나머지가 3으로 나눠지는지 확인
-> 나눠지지 않는다면 하나 더 작은 5의 배수를 선택(x-5)하고 나머지가 3으로 나눠지는지 확인
이런식으로 문제를 구현하였다.단순한 문제였고 요구사항을 만족하게 설명하는 것이 쉬웠기 때문에 2번의 질문으로 구현할 수 있었지만
더 복잡한 문제가 나오면 더 많은 수정이 필요할 것 같긴하다.하지만 어떻게 잘 요구사항을 전달하냐가 AI를 잘 활용하는 방법이라고 생각하기 때문에 copliot을 사용하는 방법도 연습해둬야할 것 같다.
전체 코드 (copliot)
def check_sum(n): if n < 3 or n == 4: return -1 count_5 = n // 5 while count_5 >= 0: if (n - (count_5 * 5)) % 3 == 0: count_3 = (n - (count_5 * 5)) // 3 break count_5 -= 1 if count_5 < 0: return -1 return count_3 + count_5 # Test the function number = int(input()) result = check_sum(number) print(result)
전체 코드 (다른 버전)
def check_combination(num): answer = 0 while(num%5 != 0 and num >= 3): num -= 3 answer += 1 if num % 5 == 0: answer += num // 5 if num == 0 or num%5 == 0: print(answer) else: print(-1) check_combination(int(input()))
직접 풀었던 코드도 추가해봤다.
'Algorithm Study > Python' 카테고리의 다른 글
[백준] 10431번 줄세우기 (0) 2024.07.17 [백준] 1009번 설탕 배달 (0) 2024.07.11 [백준] 1940번 주몽 (1) 2024.03.22 [백준] 31416번 가상 검증 기술 (0) 2024.03.22 [백준] 9655번 돌 게임 (0) 2024.03.17