백준84 [1427] 소트인사이드 카운팅 정렬을 사용하였다 0~9까지만 정렬해서 내림차순으로 출력하면 되기 때문이다 #include using namespace std; string A; int memo[10]; // 0 ~ 9 // 아스키 코드 : '0'~'9' == 48~57 // 카운팅 정렬 int main() { cin >> A; for (int i = 0; i = 0; i--) { if (memo[i]) { for (int j = 0; j < memo[i]; j++) { printf("%d", i); } } } } 2022. 7. 17. [10989] 수 정렬하기 3 브론즈 1 계수 정렬을 이용하는 문제이다 계수 정렬(Counting Sort) : 크기를 개수로 세는 정렬. 범위만큼의 배열을 설정한다. 시간 복잡도는 O(n). 메모리가 많이 요구되고 데이터가 많아질수록 시간이 매우 오래 걸리는 단점이 있다. 여기서는 입력받는 자연수의 범위가 10000까지기 때문에 배열의 크기를 10001로 설정해주었다 원소를 입력받으면 A[원소]++; 를 해준다 그리고 출력할 때 배열 순서대로 출력하면 정렬된 것처럼 보인다 처음에는 cout을 사용하였으나 시간초과 때문에 실패하여 시간을 줄여주는 코드 2줄을 작성하였고 cout을 printf로 변경해주었다 #include using namespace std; int A[10001]; int N; int main() { ios_base.. 2022. 7. 8. [2231] 분해합 브론즈 2 브루트 포스 알고리즘(Brute Force) : 완전 탐색. 가능한 모든 경우의 수 탐색 N의 분해합 : N + (N을 이루는 각 자리수의 합) N : M의 분해합 M : N의 생성자 생성자 + 각 자리 수의 합 = N(분해합)이 되면 된다 입력으로 분해합이 들어오므로 그에 따른 생성자를 구하면 된다 근데 이렇게 구한 생성자 중에서도 제일 작은 생성자를 구해야하므로 if문으로 조건을 걸어주었다 bool 자료형을 이용하여 생성자가 없는 경우도 처리해주었다 각 자리 수의 합을 구할 때에는 자연수의 범위가 1,000,000(100만) 이하이므로 그에 맞게 설정해주었다 i의 나머지를 10의 @제곱으로 나누면 자릿수가 나온다 #include using namespace std; int N; int su.. 2022. 7. 8. [2798] 블랙잭 브론즈 2 브루트포스 알고리즘을 이용한다 브루트포스 알고리즘(Brute Force) : 완전탐색. 가능한 모든 경우의 수를 탐색하는 알고리즘 총 3개의 수를 골라야 하므로 for문 3개를 이용하였다 첫 번째 for문 : 첫 번째 수 더함 ( 앞으로 더할 수가 2개 더 있으므로 N-2까지 ) 두 번째 for문 : 두 번째 수 더함 ( 앞으로 더할 수가 1개 더 있으므로 N-1까지 ) 세 번째 for문 : 세 번째 수 더함 ( N까지 ) 그리고 이것이 M을 넘지 않으면서 최대한 커야 하므로 if문으로 조건을 걸어준다 for문 중간중간마다 sum이 M을 넘어가버릴 경우 continue로 계산을 멈춰주었다 #include using namespace std; int N, M; int A[101]; int max.. 2022. 7. 8. 이전 1 ··· 6 7 8 9 다음