본문 바로가기

c언어코드업문제풀이23

[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.
[C/C++] 코드업 1915 : (재귀함수) 피보나치 수열 문제풀이 재귀함수를 사용하여 피보나치 수열을 구하면 됨. 이전 두 항의 합을 더하면 현재 항의 값이 나오게 됨. 재귀 함수 관점에서 생각하면 5번째 항이면 3번째와 4번째 항, 그리고 각각 3번째 항은 (1번째 항과 2번째 항)의 합이고, 4번째 항은 (2번째 항과 3번째 항)의 합이 됨. 이런 식으로 쪼개지고 쪼개지고 하는 것임. 이번 문제는 시간 제한이 2초나 되고 입력되는 자연수가 20이하이므로 재귀 함수를 편하게 구현하면 됨. 소스코드 #include using namespace std; int fibbo(int a){ if (a==1 || a==2) return 1; else return fibbo(a-1)+fibbo(a-2); } int main() { int n; cin>>n; cout 2022. 10. 8.
C언어 코드업 1023번 1023 : [기초-입출력] 실수 1개 입력받아 부분별로 출력하기(설명) 문제 실수 1개를 입력받아 정수 부분과 실수 부분으로 나누어 출력한다. 문제풀이 #include #pragma warning(disable:4996) int main() { int x,y; scanf("%d.%d", &x,&y); printf("%d\n", x); printf("%d", y); return 0; } - 문제에서 특별히 소수점 아래 자리는 0이 입력되지 않는다고 하였으므로 입력되는 숫자 예를 들어 1234.5676를 정수부와 소수점 아래 부분으로 나누어 입력 받는다. - 이를 printf 함수로 나누어 출력한다. 2022. 2. 8.