We will find a way, we always have.

-interstellar

조합 2

[백준] 1010번: 다리 놓기

처음에는 단순히 itertoors에서 combinations를 import해서 사용했는데 예상했던대로 시간초과가 나왔다. (요즘 문제 푸는데 시간초과가 너무 많이 나와...ㅜ) 그래서! 조합을 combinations를 사용하는 것이 아니라 식을 factorial을 불러와서 조합의 경우의 수를 만들어 주었다. 📚 풀이 1. math 모듈을 가져와 factorial을 사용한다. 2. mCn 을 factorial을 사용해서 만든다면 => (m!/(m-n)!)/n! 3. 2번에서 사용한 식을 컴퓨터에서 실행하면 오차가 발생한다. (23 24 입력시 23.9999996이 나옴) 그래서 어차피 몫과 값이 다를리가 없기 때문에 /가 아닌 //를 사용해준다. 💻 코드 import sys, math input = sys..

순열과 조합 그리고 브루트 포스

브루트 포스 (Brute-force) 는 '무차별 대입' 이라는 의미이다. 말 그대로 모든 경우의 수를 대입해보는 것이다. 완전탐색 전략을 사용하여 확실하게 답을 구하는 알고리즘이지만 단점은 시간복잡도에 있다. 모든 경우를 돌아보기 때문에 문제에서 시간초과가 발생 할 수 있다. 다음 문제를 보자. N개의 수를 입력 받아서 두 수를 뽑아 합이 가장 클 때는? 브루트 포스를 사용한다면 2중 for문을 돌면서 두 수를 골라 더해서 최댓값을 갱신하면 '두 수를 뽑는 모든 경우'를 살펴보게 되고, 답을 확실하게 구할 수 있다. 이때 시간 복잡도는 O(N^2)이 된다. 버뜨 list 사용해서 최댓값 찾고 그 두개를 더하면 시간복잡도는 O(NlogN)이다. 브루트 포스로 문제를 풀 때는 반복문을 사용할 때도 있고, ..