차근차근 꾸준히

한 눈에 알기 쉽게 정리하자

프로그래밍/백준(C++) 3

[알고리즘] 백트래킹(Backtracking)

백트래킹(Backtracking)은 문제를 해결하기 위해 가능한 모든 경우의 수를 탐색하는 알고리즘 기법이다. 하지만 단순히 모든 경우를 다 시도하는 '완전탐색'과는 다르다.백트래킹은 불필요한 탐색을 줄이는 데 초점을 맞추고 있다.백트래킹의 과정결정: 문제를 해결하기 위해 한 단계씩 선택(결정)을 진행한다.유효성 검사: 현재 선택이 문제의 조건을 만족하는지 확인한다.만족하지 않으면 "가지치기(Pruning)"를 하고 탐색을 종료한다.되돌아가기: 만족하지 않거나 이미 해결된 경우, 이전 단계로 돌아가 다른 선택을 시도한다.이 '되돌아가는 과정'이 백트래킹이라는 이름의 유래이다.백트래킹의 기본 틀백트래킹은 두 부분으로 구분한다.void backtracking(int depth, int m) { if (dep..

[C++] '<<' , '>>' 비트 시프트 연산(bit shift)

백준 문제를 풀다보니 시프트 연산에 대한 이해가 덜 되서, 정말 가볍게 정리하려고 한다. 시프트 연산과 곱셈 나눗셈의 연관'0b0101' 란 수가 있다. 이는 \(2^2 + 2^0\) 이다. 이에 시프트 연산을 하려고한다. ''0b1010'이 된다. 이는 \(2^3 + 2^1\) 로, \(2^1 * (2^2 + 2^0)\) 이다. 따라서 2를 곱하는 것이 되는 것이고, 이에 반대인 '>> n' 연산은 \(2^n\)로 나누는 연산이 되는 것이다.나누는 것은 '/' 연산과 같다. (소수점이 나오지 않는다.)