문제

도미노는 여러 종류의 타일 게임에서 사용하는 조각이다. 도미노 조각은 두 칸으로 이루어져 있다. 각 칸에는 점이 찍혀있는데, 점이 안 찍혀져 있을 수도 있다. 점의 개수는 세트의 크기에 의해서 결정된다. 세트의 크기가 N인 도미노 세트에서 점의 개수는 0보다 크거나 같고, N보다 작거나 같다. 두 도미노에 찍혀잇는 점의 개수가 같다면, 두 도미노는 동일한 것이다. 예를 들어, 점이 2개와 8개 찍혀있는 도미노는 8개와 2개 찍혀있는 도미노와 같은 도미노이다.

크기가 N인 도미노 세트는 N 또는 그보다 작거나 같은 점을 포함하는 가능한 도미노를 모두 포함하고 있고, 각 도미노는 중복되지 않는다. 다음은 크기가 2인 도미노 세트이다.

N을 입력받은 뒤, 크기가 N인 도미노 세트에는 점이 몇 개 찍혀 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 도미노 세트의 크기 N (1 ≤ N ≤ 1000)이 주어진다.

출력

크기가 N인 도미노 세트에 찍혀 있는 점의 개수를 출력한다.

예제 입력 1

2

예제 출력 1

12

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N, count=0;

	scanf("%d", &N);

	printf("%d\n", N*(N+1)*(N+2)/2);
	return 0;
}
728x90

문제

자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 2^30)이 주어진다.

출력

N이 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

예제 입력 1

1

예제 출력 1

1

예제 입력 2

2

예제 출력 2

1

예제 입력 3

3

예제 출력 3

0

예제 입력 4

4

예제 출력 4

1

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N;

	scanf("%d", &N);

	while(N>1 && N%2==0)
		N/=2;

	printf("%d\n", N==1);
	return 0;
}
728x90

문제

정수 X가 주어진다. 정수 X는 항상 8진수, 10진수, 16진수 중에 하나이다.

8진수인 경우에는 수의 앞에 0이 주어지고, 16진수인 경우에는 0x가 주어진다.

X를 10진수로 바꿔서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 X가 주어진다. X는 10진수로 바꿨을 때, 1,000,000보다 작거나 같은 자연수이다. 16진수인 경우 알파벳은 소문자로만 이루어져 있다.

출력

첫째 줄에 입력받은 X를 10진수로 바꿔서 출력한다.

예제 입력 1

10

예제 출력 1

10

예제 입력 2

010

예제 출력 2

8

예제 입력 3

0x10

예제 출력 3

16

예제 입력 4

0x3f6

예제 출력 4

1014

더보기

Solution

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

int main(void)
{
	int X=0;
	char number[15]={'\0', };

	scanf("%s", number);

	if(strncmp(number,"0x",2)==0)
		for(int i=2;i<strlen(number);i++)
		{
			X*=16;
			X+=isdigit(number[i])?number[i]-'0':number[i]+10-'a';
		}
	else if(number[0]=='0')
		for(int i=1;i<strlen(number);i++)
		{
			X*=8;
			X+=number[i]-'0';
		}
	else
		X=atoi(number);

	printf("%d\n", X);
	return 0;
}
728x90

문제

거북이는 이제 어떤 것에도 흥미를 느끼지 않는다. 그 이유는 거북이가 300년동안 살았고, 그 동안 모든 것들을 다 해보았기 때문이다. 거북이는 시간을 떼우는 무엇인가를 하려고 한다. 이번 주말에 거북이는 거북이 세계에서 매우 유명한 게임인 "가장 큰 직사각형 만들기"를 해보려고 한다.

이 게임을 시작하기 전에 거북이는 양의 정수 네 개를 머릿 속에 생각해야 한다. 한 방향으로 움직이기 시작하고 90도 회전한 뒤에 새로운 방향으로 움직인다. 이런 식으로 세 번 90도 회전을 하고, 네 번 앞으로 움직여서 선분 네 개를 만들어야 한다.

거북이가 선분을 그릴 때 움직여야 하는 걸음의 수는 생각해 놓은 네 정수중 하나이다. 이때, 한 정수를 각각 한 번씩 사용해야 한다. 거북이가 정수를 사용하는 순서에 따라서 다양한 모양이 만들어진다. 어떤 모양은 직사각형을 만들 수 없기도 한다.

거북이가 만들 수 있는 가장 큰 직사각형을 계산하는 프로그램을 작성하시오.

입력

첫째 줄에 거북이가 생각한 네 양의 정수 A, B, C, D가 주어진다. (0 < A, B, C, D < 100)

출력

첫째 줄에 거북이가 만들 수 있는 가장 큰 직사각형의 면적을 출력한다.

예제 입력 1

1 2 3 4

예제 출력 1

3

힌트

아래와 같이 움직이면 면적이 3인 직사각형을 만들 수 있다.

  1. 앞으로 네 걸음간다.
  2. 오른쪽으로 방향을 바꾼다.
  3. 한 걸음 앞으로 간다.
  4. 오른쪽으로 방향을 바꾼다
  5. 세 걸음 걷는다.
  6. 방향을 다시 90도 회전한다.
  7. 두 걸음 앞으로 걷는다.

더보기

Solution

#include<stdio.h>

int main(void)
{
	int turtle[4];

	for(int i=0;i<4;i++)
		scanf("%d", &turtle[i]);

	for(int i=0;i<3;i++)
		for(int j=i+1;j<4;j++)
			if(turtle[i]>turtle[j])
			{
				int temp=turtle[i];
				turtle[i]=turtle[j];
				turtle[j]=temp;
			}

	printf("%d\n", turtle[0]*turtle[2]);
	return 0;
}
728x90

문제

A*B를 계산하다 지겨워진 형택이는 A*B를 새로운 방법으로 정의하려고 한다.

A에서 한 자리를 뽑고 * B에서 임의로 한 자리를 뽑아 곱한다.

의 가능한 모든 조합 (A가 n자리, B가 m자리 수라면 총 가능한 조합은 n*m개)을 더한 수로 정의하려고 한다.

예를 들어 121*34는

1*3 + 1*4 + 2*3 + 2*4 + 1*3 + 1*4 = 28

이 된다. 이러한 형택이의 곱셈 결과를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는다.

출력

첫째 줄에 형택이의 곱셈 결과를 출력한다.

예제 입력 1

123 45

예제 출력 1

54

더보기

Solution

#include<stdio.h>
#include<string.h>

int main(void)
{
	char A[10001]={'\0', }, B[10001]={'\0', };
	unsigned long long int mul=0;
	int len_A, len_B;

	scanf("%s", A);
	scanf("%s", B);
	len_A=strlen(A);
	len_B=strlen(B);

	for(int i=0;i<len_A;i++)
	{
		if(A[i]=='0')
			continue;
		for(int j=0;j<len_B;j++)
			mul+=(A[i]-'0')*(B[j]-'0');
	}

	printf("%llu\n", mul);
	return 0;
}
728x90

문제

준민이는 탄산 음료를 좋아한다. 탄산 음료를 사느라 돈을 다 써버렸기 때문에, 이제 준민이는 가진 돈이 없어 탄산 음료를 사먹을 수 없다.

준민이는 항상 법을 지키며 사는 사람이기 때문에, 아무리 탄산 음료가 먹고 싶어도 훔치지 않는다. 따라서, 법적으로 문제가 없는 방법으로 탄산 음료를 구매할 것이다.

마침 빈 병을 특정 개수만큼 가져가면, 새 병으로 바꾸어주는 이벤트가 진행중이다. 준민이는 길에서 빈 병을 열심히 찾은 뒤, 탄산 음료를 먹으려고 한다.

준민이가 현재 가지고 있는 빈 병의 수와 길에서 발견한 빈 병의 수, 새 병으로 바꾸는데 필요한 빈 병의 수가 주어졌을 때, 준민이가 탄산 음료를 몇 개 먹을 수 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 준민이가 가지고 있는 빈 병의 수 e, 그날 발견한 빈 병의 수 f, 새 병으로 바꾸는데 필요한 빈 병의 개수 c가 주어진다. (e < 1000, f < 1000, 1 < c < 2000) e, f, c는 모두 음이 아닌 정수이다.

출력

첫째 줄에 준민이가 탄산 음료를 몇 개나 먹을 수 있는지를 출력한다.

예제 입력 1

9 0 3

예제 출력 1

4

더보기

Solution

#include<stdio.h>

int main(void)
{
	int c, e, f, count=0;

	scanf("%d %d %d", &e, &f, &c);

	e+=f;
	while(e>=c)
	{
		count+=e/c;
		e=e%c+e/c;
	}

	printf("%d\n", count);
	return 0;
}
728x90

문제

상근이의 남자 친구의 수와 여자 친구의 수가 주어졌을 때, 친구는 총 몇 명인지 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 두 정수 M과 F로 이루어져 있으며, 각각은 상근이의 남자 친구의 수와 여자 친구의 수이다. (1 ≤ M, F ≤ 5)

입력의 마지막 줄에는 0이 두 개 주어진다.

출력

각 테스트 케이스마다 상근이의 친구의 수를 출력한다.

예제 입력 1

2 2
2 3
5 5
1 1
0 0

예제 출력 1

4
5
10
2

더보기

Solution

#include<stdio.h>

int main(void)
{
	int M, F;

	scanf("%d %d", &M, &F);
	while(M+F!=0)
	{
		printf("%d\n", M+F);
		scanf("%d %d", &M, &F);
	}

	return 0;
}
728x90

문제

동호는 새악대로 T 통신사의 새 핸드폰 옴머나를 샀다. 새악대로 T 통신사는 동호에게 다음 두 가지 요금제 중 하나를 선택하라고 했다.

  1. 영식 요금제
  2. 민식 요금제

영식 요금제는 30초마다 10원씩 청구된다. 이 말은 만약 29초 또는 그 보다 적은 시간 통화를 했으면 10원이 청구된다. 만약 30초부터 59초 사이로 통화를 했으면 20원이 청구된다.

민식 요금제는 60초마다 15원씩 청구된다. 이 말은 만약 59초 또는 그 보다 적은 시간 통화를 했으면 15원이 청구된다. 만약 60초부터 119초 사이로 통화를 했으면 30원이 청구된다.

동호가 저번 달에 새악대로 T 통신사를 이용할 때 통화 시간 목록이 주어지면 어느 요금제를 사용 하는 것이 저렴한지 출력하는 프로그램을 작성하시오.

입력

동호가 저번 달에 이용한 통화의 개수 N이 주어진다. N은 20보다 작거나 같은 자연수이다. 둘째 줄에 통화 시간 N개가 주어진다. 통화 시간은 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 싼 요금제의 이름을 출력한다. 그 후에 공백을 사이에 두고 요금이 몇 원 나오는지 출력한다. 만약 두 요금제의 요금이 모두 같으면 영식을 먼저 쓰고 민식을 그 다음에 쓴다.

영식은 Y로, 민식은 M으로 출력한다.

예제 입력 1

3
40 40 40

예제 출력 1

M 45

예제 입력 2

3
61 61 61

예제 출력 2

Y M 90

힌트

영식 : 20 + 20 + 20 = 60 민식 : 15 + 15 + 15 = 45


더보기

Solution

#include<stdio.h>

int main(void)
{
	int N, Y=0, M=0, time;

	scanf("%d", &N);

	for(int n=0;n<N;n++)
	{
		scanf("%d", &time);

		Y+=10*((time/30)+1);
		M+=15*((time/60)+1);
	}

	if(Y>M)
		printf("M %d\n", M);
	else if(Y<M)
		printf("Y %d\n", Y);
	else
		printf("Y M %d\n", Y);
	return 0;
}
728x90

+ Recent posts