[백준 알고리즘] 브루트 포스-1 (java)
- 브루트 포스
- 모든 경우의 수를 다 해보는 것
- 경우의 수를 다 해보는데 걸리는 시간이 제한 시간을 넘지 않아야 함
- 문제 푸는 단계
- 문제의 가능한 경우의 수 계산
- 직접 계산
- 가능한 모든 경우의 수 만들기
- 하나도 빠짐 없이 만드는 게 관건
- 그냥 다 해보기, n중 for문, 순열, 재귀, 비트마스크
- 답 구하기
- 문제의 가능한 경우의 수 계산
1. 그냥 다 해보기
[일곱 난쟁이]
- 9명의 난쟁이 중 7명의 난쟁이의 키의 합이 100인 경우 찾기
- 9명 중에서 7명을 찾는 것보다, 2명을 찾는 게(2중 for문) 효율적 → sum-₉C₂=100
- 정답이 여러 개인 경우 주의! 정답 찾으면 for문 바로 탈출하기
[Code]
- 1) 입력받기: 9명의 난쟁이 키
- 2) 경우의 수: 9명 중 2명 (2중 for문)
- 정답 찾으면 for문 탈출
P2309 일곱 난쟁이
[날짜 계산]
- 두 가지 방법으로 풀 수 있음
- 1) e, s, m ++ 하면서 E, S, M과 동일해지는 year 찾기
- 2) (year%15=E) & (year%28=S) & (year%19=M) 해당하는 year 찾기
[Code]
- 1) 입력받기: E, S, M
- 2) 경우의 수: 1부터 7980(15x28x19)까지 조건에 해당하는 경우 찾기
- (year%15=E) & (year%28=S) & (year%19=M)
P1476 날짜 계산
[테트로미노]
- brute-force는 경우의 수를 빠트리기 쉬워서 dfs로 풀었음
2. N중 for문
- N개 중 일부를 선택할 경우
- 보통 2중 for문 넘어가면 재귀함수 사용
- 소스코드 복잡해지고, 실수하기 쉽기 때문
- 해당 문제는 재귀로 풀었음
Subscribe via RSS