본문 바로가기

C C++/C C++ 알고리즘 문제 기타47

[C/C++] 코드업 1928 : (재귀함수) 우박수 (3n+1) (basic) 문제풀이 이 문제는 하나 하나 과정마다 출력을 해야하기 때문에, 출력이 재귀 함수로 부르기 전 위치해서 현재 상황을 알려줘야 함. cout 2022. 10. 9.
[C/C++] 코드업 1920 : (재귀함수) 2진수 변환 문제풀이 10진수를 2진수로 바꾸는 내용임. 재귀 함수로 푸는 데, 쉽게 얘기해서 2로 나누는 작업을 계속해서 하는 것임. 그리고 쪼갤 수 있을 때까지 쪼갠 후, 그 후부터 하나씩 내려오면서 2로 나눈 나머지를 출력함. 이때 왜 마지막까지 쪼갠 후의 나머지 값부터 출력할까? 이는 가장 높은 수부터 작은수까지 출력하기 때문임. 예를 들어 33라고 해 보겠음. 이진수로 10 0001이 됨. 비트 5번과 0번. 33은 2로 5번 나눠짐. 6번째 나눌 땐 0이고. 2로 5번 나눴으면 이미 2^5라는 의미이고 그 값부터 출력해야 하는 것임. 이미 32라는 값을 10 0000으로 올려줬으니, 남은 숫자는 1만 남았음. 각각 2^4일 때 나머지 0 일 것이고, 2^3일 때 나머지 0일 것이고..... 마지막으로 2^.. 2022. 10. 8.
[C/C++] 코드업 1805 : 입체기동장치 생산공장 문제풀이 일차 배열로도 풀 수 있는 문제이지만, 문제 카테고리에 맞게 구조체를 이용하여 풀었다. 즉, 구조체 + 벡터 + 정렬을 통해 풀었다. 이 조합은 알고리즘 문제에서 종종 볼 수 있는 조합이고 단골 문제 풀이법이다. 우선 gas라는 구조체를 만들고 이를 사용하는 벡터를 만듦. 그럼 이 벡터는 gas라는 구조체를 사용하는 벡터가 됨. struct gas{ int x; int y; }; vector v; 입력 부분은 생략하고 정렬하는 부분을 살펴 보도록 하겠음. bool cmp(gas A, gas B) { if (A.xa.x>>a.y; v.push_back({a.x,a.y}); } sort(v.begin(), v.end(), cmp); for (int i=0; i 2022. 10. 8.
[C/C++] 코드업 1916 : (재귀함수) 피보나치 수열 (Large) 문제풀이 이 문제는 메모이제이션을 이용하여 재귀 함수 계산 시간을 단축하는 문제임. 이전 문제에서는 단순히 함수 호출을 반복해서 하였으나, 이번 문제는 배열에 결과값을 적고, 값이 필요하면 '함수를 호출하는 것'이 아니라 '배열에서 이전에 계산한 값'만 불러오게 되어 시간이 단축되는 구조임. 중복해서 함수를 계속 부르는 것보다 배열에서 가져다 쓰는 게 빠름. 메모이제이션은 top down과 bottom up이 있는 데, 사실 이러한 개념보다는 아래 문장을 외워보는 게 좋음. '값이 배열에 적혀 있지 않으면 배열에 적은 후 리턴하고, 값이 이미 적혀 있다면 적힌 값을 리턴함.' 이것만 잊지 않는다면 웬만한 메모이제이션 문제를 모두 풀 수 있음. 그리고 잘 보면 아래에 %10009로 나머지 구하는 걸 거의 .. 2022. 10. 8.