본문 바로가기

전체 글102

[C] 11047: 동전 0 이 문제는 Greedy 알고리즘을 이용해서 푸는 문제로 직관적인 생각으로 바로 문제를 풀 수 있다. #include #include int main(void) { int n,k; scanf("%d %d",&n,&k); int arr[n]; for(int i=0;i=0;j--) { if(k/arr[j]!=0) //나눠질 수 있음 { cnt+=k/arr[j]; k-=(k/arr[j])*arr[j]; //몫*동전 } } printf("%d",cnt); } 2023. 7. 18.
[C] Quicksort 정렬하기 백준 2751번 수정렬하기 2번을 푸는데 quicksort를 이용하여 풀려고 했다. 근데 quicksort는 최악의 경우 시간복잡도가 n^2이기때문에 시간초과가 떴다... 다음번에는 mergesort를 이용하여 다시 풀어봐야겠다. 아래의 소스코드는 quicksort를 이용해 시간이 정해져있지 않을때 맞는 코드이다.. 또 공부해야한다니.. #include #include void swap(int *a, int *b) //포인터를 써야지 값이 함수를 넘어가도 유지가 됨 { int tmp; tmp=*a; *a=*b; *b=tmp; } void quicksort(int arr[],int left,int right) { if(left==right) //탈출 조건(원소가 하나일때) return; int pivot=.. 2023. 7. 16.
[C] 2292: 벌집 계차수열을 이용하여 수식을 구해서 풀 수 있다 거리가 1인 벌집은 1 거리가 2인 벌집은 2~7 거리가 3인 벌집은 8~19 거리가 4인 벌집은 20~37.. 이런 식으로 진행되기 때문에 거리가 n일때 벌집은 f(n-1)~f(n)까지 일 것이다 맨 끝 벌집이 1->7->19->37->61..로 증가하고 각 끝 벌집끼리는 6->12->18->...로 증가하는 것을 알 수 있다. 따라서 계차수열을 이용하면 f(n)=3*n^2-3*n+1인 것을 알 수 있다. 이를 이용해 문제를 풀게 되면 아래와 같다. #include int main(void) { int n; scanf("%d",&n); int i; for(i=1;i7->19->37..) if(k>=n) //입력받은 수가 거리보다 작을때 멈춤 break; }.. 2023. 7. 8.
[C] 2908: 상수 이 문제는 여러가지 풀이가 가능하지만 입력 조건이 매우 간단하기 때문에 밑에 소스코드처럼 작성하면 쉽게 풀 수 있다. #include int main(void) { int a,b; scanf("%d %d",&a,&b); int x,y,z; z=a%10; //일의 자리수 y=(a/10)%10; //십의 자리수 x=(a/100)%10; //백의 자리수 int result1= z*100+y*10+x; z=a%10; //일의 자리수 y=(a/10)%10; //십의 자리수 x=(a/100)%10; //백의 자리수 int result2= z*100+y*10+x; if(result1>result2) printf("%d",result1); else printf("%d",result2); return 0; } 다만, 좀.. 2023. 7. 8.