본문 바로가기

c언어코드업23

[C/C++] 코드업 1929 : (재귀함수) 우박수 (3n+1) (reverse) 문제풀이 이전 문제와 다르게 재귀 함수 호출이 가장 깊을 때부터 출력하는 문제임. 이렇게 하려면 출력하는 코드를 재귀 함수 호출 뒤에 숨겨두면 됨. 이러면 예를 들어 D(5) => D(16) => D(8) => D(4) => D(2) => D(1)까지 출력 한 후, D(1) 지나면서 1 출력 D(2) 지나면서 2 출력 D(4) 지나면서 4 출력 D(8) 지나면서 8 출력 ...과 같은 형태로 출력될 것이기 때문임. 그래서 출력하는 부분을 재귀 함수 내에서 가장 아래 부분에 배치하면 완료됨. 소스코드 #include #include #include #include using namespace std; int n; void D(int x) { if (x==1){ } else { if (x%2==0) { D(.. 2022. 10. 9.
[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.