No. 2908

#include<stdio.h>
int reverse(n);
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	if (reverse(a) > reverse(b)) {
		printf("%d", reverse(a));
	}
	else {
		printf("%d", reverse(b));
	}
}
int reverse(n) {
	int r = 0;
	while (n) {
		r = (r * 10) + (n % 10);
		n = n / 10;
	}
	return r;
}

코드 설명 : 두 수 a, b를 입력 받고 reverse라는 함수를 만들어 a, b를 인자로 넣어주었다. reverse 함수는 r에 r*10 + n%10을 저장해주고 이 과정을 n번 반복시켜주었다. 이 함수를 통해 숫자를 뒤집어서 반환할 수 있다. reverse(a)와 reverse(b)를 비교하여 더 큰 것을 출력하도록 했다.

 

 

No. 2920

#include<stdio.h>
int main()
{
	int arr[9], a = 1, d = 8;
	for (int i = 0; i < 8; i++) {
		scanf("%d", &arr[i]);
	}
	for (int i = 0; i < 8; i++) {
		if (arr[i] == a){
			a++;
		}
	}
 	if (a > 8) {
		printf("ascending");
		return 0;
	}
	else {
		for (int i = 0; i < 8; i++) {
			if (arr[i] == d){
				d--;
			}
		}
		if (d < 1) {
			printf("descending");
			return 0;
		}
		else printf("mixed");
	}
	
}

코드 설명 : 8개의 숫자를 입력받고 그 수가 ascending인지 판별하기 위해 a라는 변수를 만들어 입력받은 원소가 차례대로 1부터 1씩 증가하는지 확인하도록 하였다. 그래서 최종적으로 a가 8보다 커지면 ascending에 해당하므로 이를 출력하도록 했다. 이에 해당하지 않는다면 이번에는 d라는 변수를 만들어 8부터 차례대로 1씩 감소하는지 확인하도록 하였다. 최종적으로 d가 1보다 작아진다면 descending에 해당하므로 이를 출력하도록 하였다. 앞에 두 경우에 모두 해당하지 않는다면 mixed를 출력하도록 하였다.

 

 

 

No. 3052

#include<stdio.h>
int main()
{
	int i, n, arr[42] = { 0 }, cnt = 0;
	for (i = 0; i < 10; i++) {
		scanf("%d", &n);
		n = n % 42;
		arr[n]++;
	}
	for (i = 0; i < 42; i++) {
		if (arr[i] >= 1) {
			cnt++;
		}
	}
	printf("%d", cnt);
}

코드 설명 : 배열 arr[42]의 모든 원소를 0으로 초기화해주었다. 10개의 수 n을 입력받아 각자 42로 나눈 나머지를 저장하고 arr 배열의 n번째 원소에 1씩 추가해주었다. 이 배열의 모든 원소를 for문으로 모두 확인하도록 하였다. 원소가 1보다 크거나 같으면 cnt값을 증가시켜주었다. 이는 서로 다른 값이 몇 개 있는지를 알기 위함이다. 그리고 마지막에 cnt값을 출력시켜주었다.

No. 2742

#include<stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	while (n > 0) {
		printf("%d\n", n);
		n--;
	}
}

코드 설명 : 먼저 n을 입력받았다. n이 0보다 클때까지 계속 n을 출력하도록하고 n을 1씩 줄이도록 반복문을 실행시켜주었다. 출력될 때마다 줄바꿈 또한 해주었다.

 

 

No. 2753

#include<stdio.h>
int main()
{
	int y;
	scanf("%d", &y);
	if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) printf("1");
	else printf("0");
}

코드 설명 : 연도를 입력받고 if문으로 이 연도가 4의 배수이면서 100의 배수가 아닌지, 또는 이 연도가 400의 배수인지 확인하고 맞다면 1을 출력하도록 하였다. 이 조건을 만족하지 않는다면 0을 출력하도록 하였다.

 

 

No. 2884

#include<stdio.h>
int main()
{
	int h, m;
	scanf("%d %d", &h, &m);
	if (m >= 45) m -= 45;
	else {
		if (h == 0) h = 23;
		else h -= 1; m += 15;
	}
	printf("%d %d", h, m);
}

코드 설명 :  h와 m을 입력받았다. 각 시, 분을 의미하는 변수이다. 45분 이상일 때에는 h 변화 없이 m만 45를 빼주면 된다. 45분 미만일 때 h가 0이면 23으로 바꿔주고 0이 아니면 h에서 1빼주고 m은 60분에서 45분을 뺀 후에 원래 m값을 더해주면 되므로 m+=15를 해주면 값이 나온다. 따라서 이를 출력해주었다.

No. 2675

#include<stdio.h>
#include<string.h>
int main()
{
	int tc, i, re, j, k;
	char str[21];
	scanf("%d", &tc);
	for (i = 0; i < tc; i++) {
		scanf("%d %s", &re, str);
		for (j = 0; j < strlen(str); j++) {
			for (k = 0; k < re; k++) {
				printf("%c", str[j]);
			}
		}
		printf("\n");
	}

}

코드 설명 : 먼저 테스트케이스를 입력받고 그만큼 반복문을 돌려주도록 하였다. 반복문 내에서 반복할 횟수인 re와 문자 배열인 str을 입력받아주었다. 그 배열의 길이만큼 반복시키고 그 내에서 반복할 횟수인 re만큼 반복시켜 str[j]를 출력하도록 하였다. 이는 str의 원소를 앞에서부터 하나씩 re만큼 반복시킬 수 있도록 한 것이다. 그리고 반복해서 모두 출력을 완료하면 그 for문 밖에서 줄바꿈을 해주도록 하였다.

 

No. 2739

#include<stdio.h>
int main()
{
	int n, i;
	scanf("%d", &n);
	for (i = 1; i <= 9; i++) {
		printf("%d * %d = %d\n", n, i, n * i);
	}
}

코드 설명 : n단을 출력하기 위해 n을 입력받았다. n을 각 1에서 9까지 곱해주어야하기 때문에 for문으로 i가 1에서 9까지 n * i = n*i를 출력하도록 하였다. 

 

No. 2741

#include<stdio.h>
int main()
{
	int n, i;
	scanf("%d", &n);
	for (i = 1; i <= n; i++) {
		printf("%d\n", i);
	}
}

코드 설명 : 먼저 n을 입력받았다. 1부터 n까지 출력해야 하므로 for문으로 i가 1에서 n일때까지 i를 반복시켜 출력시켜주었다

No. 1546

#include<stdio.h>
int main()
{
	int arr[6], i, sum = 0;
	for (i = 0; i < 5; i++) {
		scanf("%d", &arr[i]);
		sum = sum + arr[i] * arr[i];
	}
	printf("%d\n", sum % 10);
}

코드 설명 : 입력된 각 수의 제곱을 모두 더해야 한다. 따라서 for문을 통해 배열에 5자리 수를 입력받은 후, 변수 sum에 각 배열의 원소의 제곱을 더해주었다. 그리고 sum을 10으로 나눈 나머지 값을 출력해주었다.

 

No. 2562

#include<stdio.h>
int main()
{
	int arr[10], i, max = 0, index;
	for (i = 0; i < 9; i++) {
		scanf("%d", &arr[i]);
		if (max < arr[i]) {
			max = arr[i];
			index = i;
		}
	}
	printf("%d\n%d\n", max, index+1);
}

코드 설명 : 9개의 수를 for문으로 입력받아주고 max의 초기값을 0으로 설정한 후 max보다 입력받은 배열의 원소가 크면 max에 그 원소값을 넣어주었다. 그리고 그 원소의 인덱스 값을 index 변수에 넣어주었다. 이 과정을 반복하여 최댓값과 그 수의 인덱스를 구하여 마지막에 출력해주었다. 이 때 for문에서 i가 0부터 시작했으므로 인덱스는 +1하여 나타내주었다.

 

No. 2577

#include<stdio.h>
int main()
{
	int cnt[10] = { 0, }, a, b, c, mul, j;
	scanf("%d %d %d", &a, &b, &c);
	mul = a * b * c;
	while (mul != 0) {
		cnt[mul % 10]++;
		mul = mul / 10;
	}
	for (j = 0; j < 10; j++) {
		printf("%d\n", cnt[j]);
	}
}

코드 설명 : 먼저 숫자 3개를 입력 받고 그 수들을 모두 곱한 값을 mul에 저장해주었다. cnt배열에 모든 원소의 초기값을 0으로 지정해주었고 인덱스 mul%10에 1을 추가해주었다. mul%10은 0~9에 해당되고 이 계산을 통해 각 숫자가 몇번 쓰였는지를 알 수 있다. 그리고 mul을 10으로 나눠주었고 이 과정을 mul이 0이 아닐때까지 반복하였다. 마지막에 cnt배열의 원소를 모두 출력하도록 하였다.

+ Recent posts