본문 바로가기

C C++/C C++ 유용한 알고리즘 기법16

[C/C++] 백준 11653번 소인수분해 문제 풀이 소인수 분해를 어떻게 하는지에 대해 서임. 꽤나 유의미한 문제라고 생각됨. 풀이에서 크게 배울점은 while문과 while문 안에서 if-break문 사용하는 것임. 실제 풀이에서 중요부분은 아래와 같다. 1) while문은 항상 참으로 둠. 2) 이 때 i=2로 가장 작은 소수로 시작함. 3) 2로 나누어 떨어지면 N값을 N/2 연산함. 그리고 나누어졌으므로 2를 출력함. 4) 그리고 다시 while문으로 들어와 다시 N/2된 값을 2로 나눠 봄. 이때 나누어지면 N/2를 다시 2로 나누어 연산함. 그리고 나누어졌으므로 2를 출력함. 3) 만약 나누어 떨어지지 않으면 i=2에서 i++;하여 i를 3으로 올림. 즉, 최대한 나누어질때까지는 while문으로 계속해서 나누는 것임. 그리고 출력하는.. 2022. 10. 4.
[C/C++] 팩토리얼 구현하기 (재귀함수의 이해) 팩토리얼 구현 팩토리얼은 특정 값에서 1까지를 모두 곱하는 연산을 의미함. 예를 들어 10!이면 10 팩토리얼이라고 읽는 데, 10*9*8*7*.....*2*1까지 모두 곱한 연산을 하게 됨. 그렇다면 가장 기본적으로는 손쉽게 for문을 통해 이 값을 구할 수 있음 팩토리얼 for문 구현 부가적인 것 다 제외하면 아래 내용이 핵심임. 단순하게 1부터 a까지 곱하는 것임. int factorial(int a) { int res=1; if (a==0) return 1; else { for (int i=1; i 2022. 9. 29.
[C/C++] 맵(좌표) 동서남북 알고리즘 문제 고찰 오늘은 알고리즘 문제에 흔히 나오는 그래프(좌표) 탐색에 대해 알아보도록 하려고 한다. 흔히 알고리즘 문제에서 정사각형의 지도가 주어지고 그 안에서 보물을 찾는다든지, 탐색하면서 값을 변경하는 지 등등을 요구하는 문제들이 보인다. 이번에는 해당 위치에서 동서남북으로 탐색하는 예시를 들고자 한다. 맵(좌표) 탐색하기 크게 두 가지가 구현되어야 한다. 1) for문으로 현재 위치를 계속해서 바꿔 줌 (현재 좌표값이 계속해서 바뀌면서 탐색함) 2) 현재 위치 기준으로 동서남북으로 탐색하기 예시는 5x5 지도에서 인덱스 x=2, y=1에 있는 보석과 x=3, y=1에 있는 보석이 있고, 보석의 개수를 세는 문제이다. 00000 00000 01000 01000 00000 위와 같다. 첫 번째: 맵에 대한 값과 동.. 2022. 8. 8.
[C/C++] 정수 자릿수 뒤집기 이번에는 입력받은 정수의 자릿수를 뒤집는 것을 알아보도록 하려고 한다. 우선 it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비라는 강의에서 알게 된 내용임. 알고리즘 문제 풀 때 정수 자릿수를 바꾸라는 문제가 있는 데, 종종 수학적인 느낌으로 쉽게 풀 수 있다. 지금까지는 문자열에 각 자릿수를 입력하고 이를 스위칭하는 방식으로 문제를 풀어 왔는 데, 너무 비효율적임. 정수 자릿수 뒤집기 #include int main() { int a=12345; int res=0; int tmp=0; while (a>0){ tmp=a%10; res=res*10+tmp; a=a/10; } printf("%d", res); return 0; } 1) 입력받은 a를 a%10을 통해 일의 자릿수만.. 2022. 7. 17.