728x90
반응형

백준 알고리즘 단계별로 풀어보기 39

백준 알고리즘 1978번 소수 찾기 (C언어)

실버Ⅴ https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 풀이 방법 *소수는 약수가 1과 자기자신뿐인 자연수이다. 입력받은 각각의 수를 배열에 저장하고, 2중 for문을 이용해 배열에 저장된 수의 약수의 개수가 2개인 경우(1과 자기자신) 소수의 개수를 +1 증가시키면 된다. 내 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #pragma warning(disable:4996..

백준 9506번 약수들의 합 (C언어)

브론즈Ⅰ https://www.acmicpc.net/problem/9506 9506번: 약수들의 합 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라. www.acmicpc.net 풀이 방법 n을 입력받고 1부터 n-1까지(자기 자신을 제외한 모든 약수들을 구해야 하므로)의 수 중 n의 약수를 찾기위해 for문을 이용해 i에 1부터 n-1까지 대입한다. 만약 n%i(n을 i로 나눈 나머지)가 0일 경우(i가 n의 약수일 경우) 배열에 그 수를 저장하고 n의 약수의 개수를 셀 cnt를 1 증가시킨다. 또한, n이 완전수인지를 판단해야 되기 때문에 sum에 약수..

백준 알고리즘 2748번 피보나치 수 2 (C언어)

브론즈Ⅰ https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 풀이 방법 피보나치 수열은 첫 번째 항의 값이 0이고 두 번째 항의 값이 1일 때, 이후의 항들은 이전의 두 항을 더한 값으로 이루어지는 수열을 말한다. 즉, 아래의 표처럼 진행된다. 0 1 2 3 4 5 6 7 8 9 0 1 1 2 3 5 8 13 21 34 피보나치 수열은 보통 재귀함수열을 이용해 풀지만, 재귀함수로 풀 경우 시간이 많이 걸린다. 따..

백준 알고리즘 2501번 약수 구하기 (C언어)

브론즈Ⅲ https://www.acmicpc.net/problem/2501 2501번: 약수 구하기 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. www.acmicpc.net 풀이 방법 약수란 어떤 자연수를 나누어 떨어지게 하는 수이다. 즉 12의 약수는 1, 2, 3, 4, 6, 12이다. N의 약수들 중 K번째로 작은 수를 출력하는 문제이기 때문에 for문을 이용해 N을 1부터 2, 3, 4, ... N까지 나눈 나머지를 확인한 후, 나눈 나머지가 0일 때마다 cnt를 1씩 증가시키며 k번째로 작은 수를 찾아낸다. 내 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ..

백준 알고리즘 5086번 배수와 약수 (C언어)

브론즈Ⅲ https://www.acmicpc.net/problem/5086 5086번: 배수와 약수 각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다. www.acmicpc.net 풀이 방법 -첫 번째 숫자가 두 번째 숫자의 약수일 경우 두 번째 숫자를 첫 번째 숫자로 나눈 나머지가 0이 될 것이다. -첫 번째 숫자가 두 번째 숫자의 배수일 경우 첫 번째 숫자를 두 번째 숫자로 나눈 나머지가 0이 될 것이다. 위의 두가지 사실을 이용해 문제를 풀 수 있다. 내 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #pragma ..

백준 알고리즘 10757번 큰 수 A+B (C언어)

브론즈Ⅴ https://www.acmicpc.net/problem/10757 10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 방법 C언어로 표현할 수 있는 최대 정수는 자료형 unsigned long long을 이용한 18,446,744,073,709,551,615(약 10^19) 승이다. 하지만, 이 문제의 경우 A와 B의 최댓값이 10^10000-1이기 때문에 unsigned long long을 사용하기에는 부적절하다. 따라서 컴퓨터 내에서 실제로 덧셈을 하는 것이 아닌, 우리가 덧셈을 하는 과정을 이용해 실제 덧셈을 하는 것처럼 코드를 작성해야한다. 즉, 아래의 예시와 같은 과정을 직접 코드로 구현해 주어야 ..

[백준 알고리즘 2839번 문제] 설탕배달 (C언어) #실버Ⅳ

실버Ⅳ https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 풀이 방법 먼저 5kg 봉지를 최대한 많이 선택한 후 나머지 무게를 3kg 봉지로 채우는 것이 최적해를 찾는 방법이다. 1. 먼저 5kg 봉지의 최대개수와 5kg으로 나누었을때 남은 나머지 무게를 구한다. 2. 3kg 봉지로 나머지 무게를 나눈 나머지가 0이 될때까지 5kg 봉지를 한개씩 빼본다. 3. 5kg 봉지가 0개일때 나머지 무게가 3kg 봉지로 나누어 떨어지지 않는다면 -1을 출력한다. 내 ..

[백준 알고리즘 10869번 문제] 사칙연산 (C언어) #브론즈Ⅴ

브론즈Ⅴ https://www.acmicpc.net/problem/10869 10869번: 사칙연산 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 방법 헤더파일에 있는 scanf함수를 이용해 A와 B를 입력받고, printf 함수를 이용해 출력형식에 맞게 A+B, A-B, A*B, A/B, A%B를 차례로 출력한다. 내 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 #pragma warning(disable:4996) #include int main() { int A,B; scanf("%d %d",&A,&B); printf("%d\n%d\n%d\n%d\n%d\n", A+B,A..

[백준 알고리즘 1008번 문제] A/B (C언어) #브론즈Ⅴ

브론즈Ⅴ https://www.acmicpc.net/problem/1008 1008번: A/B 두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 방법 헤더파일에 있는 scanf함수를 이용해 A와 B를 입력받고, printf 함수를 이용해 A/B를 출력한다. 단, 10^-9이하의 오차를 허용하므로, 변수 A, B의 자료형을 double 자료형으로 해야하며, 출력시 최소한 소수점 9자리는 출력해야 한다. 내 코드 1 2 3 4 5 6 7 8 9 10 11 12 #pragma warning(disable:4996) #include int main(void) { double A,B; scanf("%lf%lf",&A,&B); printf("%.9lf",..

[백준 알고리즘 10998번 문제] AxB (C언어) #브론즈Ⅴ

브론즈Ⅴ https://www.acmicpc.net/problem/10998 10998번: A×B 두 정수 A와 B를 입력받은 다음, A×B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 방법 헤더파일에 있는 scanf함수를 이용해 A와 B를 입력받고, printf 함수를 이용해 AxB를 출력한다. 내 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 #pragma warning(disable:4996) #include int main(void) { int A,B; scanf("%d %d",&A,&B); printf("%d\n", A*B); return 0; } cs 느낀 점 아주 기본적인 c언어를 이용한 입출력이다.

728x90
반응형