개인적으로 느낀게 많아서 후닥닥 적어본다.
이것을 풀고자 했을 때 든 생각은 우선 주어진 S가 될 수 있는
조합을 찾아야겠다! 라는 생각에
python의 Combination 모듈을 사용하려 했다.
근데 Combination은 배열이 주어졌을 때만 사용이 가능하였다.
그래서 이런 생각이 들었다.
30분 머리를 굴려봐도 비효율적인 방법만 나와가지고
다른 사람의 풀이를 참고하기로 하였다.
def solution(n, s) :
answer = []
if n > s: # 이런 경우는 -1을 출력하라 했으므로 예외처리
answer.append(-1)
return answer
# divmod() 함수 s // n의 몫과 나머지를 모두 구해주는 함수
quo, rem = divmod(s, n)
answer = [quo] * n # n만큼 몫을 배열에 넣어주고
for i in range(rem): # 나머지만큼 for문을 돌려
answer[i] += 1 # 몫이 들어있는 배열에 1을 더해줘 나간다.
return sorted(answer) # 그럼 가장 큰 곱이 나올 집합이 나오게 된다.
print(solution(2, 8))
그렇게 divmod() 함수를 사용하여 한 풀이로 해당 문제를 풀 수 있었다.
나는 조합에 집착을 하고 있었는데, 이분은 큰 곱을 만들려면 큰 수끼리 곱을 하면 되니까 어떻게 큰 수들을 만들지 궁리를 하셨던 것이었다.
나는 이 풀이를 보고
단순히 문제에서 요구하는 조건을 모두 구현하는 것이 아니라
어떻게 짧고 효율적인 방법으로 답을 도출할 것인지를
생각해야 한다는 것을
조합을 찾을 필요가 없었다 우리가 필요한 건
S가 되는 집합 들의 곱 중 가장 큰 곱을 찾는 것,
그러니 집합내의 숫자들이 가장 큰 집합을 찾아내는
코드를 작성해야 한다.
는 것을 깨달았다.
어려워 머리굴리는게 너무 어려워😬
이런 유용한 정보를 나눠주셔서 감사합니다.