문제

4명의 친구가 탁구를 하고 있다. 각각은 정수형으로 표현된 스킬 레벨을 가지고 있고, 숫자가 높을수록 더 좋은 플레이어다.

4명의 친구는 각각 두 명씩 구성된 두 팀을 구성하려고 한다. 게임이 더 흥미롭게 하기 위해서 팀의 스킬 레벨을 최대한 가깝게 유지하기를 원한다. 팀의 스킬 레벨은 팀원의 스킬 레벨의 합계이다.

그들은 탁구 선수로는 탁월하지만, 수학이나 컴퓨터와 같은 다른 것들에 능숙하지 않다. 팀의 스킬 레벨이 가능한 작은 차이를 갖도록 도와주자.

입력

입력은 네 개의 정수 A, B, C 및 D가 포함된 한 줄로 구성되며 4명의 스킬 레벨이 주어진다. (0 ≤ A ≤ B ≤ C ≤ D ≤ 10^4)

출력

두 팀의 스킬 레벨 차이의 최솟값을 출력한다.

예제 입력 1

4 7 10 20

예제 출력 1

7

예제 입력 2

0 0 1 1000

예제 출력 2

999

예제 입력 3

1 2 3 4

예제 출력 3

0

더보기

Solution

#include<stdio.h>

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

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

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

	printf("%d\n", level[0]>level[1]?level[0]-level[1]:level[1]-level[0]);
	return 0;
}
728x90

문제

신용카드는 총 16자리의 숫자로 구성되어 있다. 언뜻 보기에는 무작위로 된 숫자로 구성되어 있는 것 같이 보이지만 그 속에는 하나의 수학적 비밀이 숨겨져 있다. 그중 하나가 카드 번호가 유효 한지 유효하지 않은 지 검사하는 Luhn 공식이다. 그 공식은 다음과 같다.

  1. 신용카드의 16자리 숫자에서 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로 만든다.
  2. 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체한다.
  3. 이와 같이 얻은 모든 자리의 수를 더한다.
  4. 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)로 판정된다.

다음 공식을 이용해 주어진 신용카드의 번호가 유효한지, 유효하지 않은 지 판단해라.

입력

첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1000)이 주어진다.

그 다음 줄부터 테스트 케이스에 해당하는 신용카드 번호가 주어진다.

출력

신용카드의 번호가 유효하면 “T”, 유효하지 않으면 “F”를 한 줄 씩 출력한다.

예제 입력 1

3
2720992711828767
3444063910462763
6011733895106094

예제 출력 1

T
F
T

더보기

Solution

#include<stdio.h>

int main(void)
{
	int T;

	scanf("%d", &T);

	for(int t=0;t<T;t++)
	{
		int sum=0, card[16];

		for(int i=0;i<16;i++)
		{
			scanf("%1d", &card[i]);
			sum+=i%2==1?card[i]:card[i]*2>9?2*card[i]/10+2*card[i]%10:2*card[i];
		}

		printf("%c\n", sum%10==0?'T':'F');
	}

	return 0;
}
728x90

문제

상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.

외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다.

알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.

  1. 정사각형의 각 변의 중앙에 점을 하나 추가한다.
  2. 정사각형의 중심에 점을 하나 추가한다.

첫 단계에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.

아래 그림은 과정을 총 2번 거쳤을 때 까지의 모습이다.

상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위해서 중복하는 점을 한 번만 저장하려고 한다. N 단계를 거친 후 점 몇 개를 저장해야 하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (1 ≤ N ≤ 15)

출력

첫째 줄에 N 단계를 거친 후에 점의 수를 출력한다.

예제 입력 1

1

예제 출력 1

9

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N, power=1;

	scanf("%d", &N);

	for(int n=0;n<N;n++)
		power*=2;
	power++;

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

문제

세 수 A, B, C를 입력 받은 다음, ( ( ( ( A XOR B ) XOR B ) XOR B ) … ) XOR B 형태로 연산을 C회 했을 때의 결과값을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A, B, C가 주어진다. (0 < A, B, C ≤ 10^9)

출력

첫째 줄에 계산된 결과를 출력한다.

예제 입력 1

13 3 1

예제 출력 1

14

더보기

Solution

#include<stdio.h>

int main(void)
{
	int A, B, C;

	scanf("%d %d %d", &A, &B, &C);

	for(int c=0;c<C%2;c++)
		A^=B;

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

문제

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A(1), A(2), ..., A(N)에 있다.

수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다.

모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.

입력

첫째 줄에 N(1 ≤ N ≤ 10^5)과 S(1 ≤ S ≤ 10^9)가 주어진다. 둘째 줄에 동생의 위치 A(i)(1 ≤ A(i) ≤ 10^9)가 주어진다. 동생의 위치는 모두 다르며, 수빈이의 위치와 같지 않다.

출력

가능한 D값의 최댓값을 출력한다.

예제 입력 1

3 3
1 7 11

예제 출력 1

2

예제 입력 2

3 81
33 105 57

예제 출력 2

24

예제 입력 3

1 1
1000000000

예제 출력 3

999999999

더보기

Solution

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

int gcd(int x,int y)
{
	if(x<y)
	{
		int temp=x;
		x=y;
		y=temp;
	}

	while(y!=0)
	{
		int temp=x%y;
		x=y;
		y=temp;
	}

	return x;
}

int abs(int x)
{
	return x>0?x:-x;
}

int main(void)
{
	int N, *A=NULL, S, D=1000000000;

	scanf("%d %d", &N, &S);
	A=(int *)malloc(N*sizeof(int));
	for(int n=0;n<N;n++)
	{
		scanf("%d", &A[n]);
		D=n==0?abs(S-A[0]):gcd(D, abs(S-A[n]));
		if(D==1)
			break;
	}

	printf("%d\n", D);
	free(A);
	return 0;
}
728x90

문제

농부 존은 소 베시와 소 데이지를 키우고 있습니다.

두 소는 자유롭게 1,000 × 1,000 2차원 격자 목초지를 누비며 놀고 있습니다. 농부 존이 종을 치면 베시와 데이지가 농부 존이 있는 곳으로 달려갑니다. 

베시가 B에 있을 때 1초 후에 움직일 수 있는 칸과 데이지가 D에 있을 때 1초 후에 움직일 수 있는 칸을 나타낸 그림
 

베시는 1초 후에 꼭짓점을 공유하는 8개의 칸 중 하나로 이동할 수 있고 데이지는 1초 후에 변을 공유하는 4개의 칸 중 하나로 이동할 수 있습니다. 칸들은 충분히 넓어서 칸 하나에도 베시와 데이지 그리고 존이 같이 서 있을 수 있습니다. 

베시와 데이지 두 소 모두 최단 경로로 존에게 갈 때 어떤 소가 더 빨리 도착할까요?

입력

첫 번째 줄에 베시의 좌표 Br, Bc (1 ≤ Br, Bc ≤ 1,000) 이 주어집니다.

두 번째 줄에 데이지의 좌표 Dr, Dc (1 ≤ Dr, Dc ≤ 1,000) 이 주어집니다.

세 번째 줄에 존의 좌표 Jr, Jc (1 ≤ Jr, Jc ≤ 1,000) 이 주어집니다.

처음에 존이 있는 칸에는 베시와 데이지가 없음이 보장됩니다.

출력

첫 번째 줄에 베시가 더 빨리 도착하면 'bessie', 데이지가 더 빨리 도착하면 'daisy', 동시에 도착하면 'tie' 를 출력합니다.

예제 입력 1

3 5
1 1
2 3

예제 출력 1

bessie

베시는 (3, 5) > (2, 4) > (2, 3) 경로로 이동하여 존에게 오는데 2초가 걸립니다.

반면 데이지는 (1, 1) > (1, 2) > (1, 3) > (2, 3) 경로로 이동하여 존에게 오는데 3초가 걸리므로 베시가 더 빨리 도착합니다.

예제 입력 2

13 13
11 11
11 12

예제 출력 2

daisy

예제 입력 3

4 5
5 4
4 4

예제 출력 3

tie

더보기

Solution

#include<stdio.h>

int abs(int x)
{
	return x>0?x:-x;
}

int main(void)
{
	int Br, Bc, Dr, Dc, Jr, Jc, B, D;

	scanf("%d %d", &Br, &Bc);
	scanf("%d %d", &Dr, &Dc);
	scanf("%d %d", &Jr, &Jc);

	Br=abs(Br-Jr);
	Bc=abs(Bc-Jc);
	B=Br<Bc?Bc:Br;
	D=abs(Dr-Jr)+abs(Dc-Jc);

	printf("%s\n", B<D?"bessie":B>D?"daisy":"tie");
	return 0;
}
728x90

문제

Vera owns N tops and N pants. The i-th top and i-th pants have colour i, for 1 ≤ i ≤ N, where all N colours are different from each other.

An outfit consists of one top and one pants. Vera likes outfits where the top and pants are not the same colour.

How many different outfits does she like?

입력

The input will be in the format:

N

Constraints:

  • 1 ≤ N ≤ 2017
  • N is integer

출력

Output one line with the number of different outfits Vera likes.

예제 입력 1

1

예제 출력 1

0

예제 입력 2

2

예제 출력 2

2

예제 입력 3

5

예제 출력 3

20

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N;

	scanf("%d", &N);

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

문제

동혁이는 졸업을 하기 위해 일반 화학 실험을 들어야 한다. 마지막 실험은 어떤 혼합물을 만든 뒤 온도를 1분에 한 번씩 잰 후, 1분동안 변화한 온도를 표로 만들어야 한다.

뛰어난 프로그래머인 동혁이는 혼합물의 온도를 자동으로 측정해주는 프로그램을 만들었다. 하지만, 깜빡하고 변화한 온도를 자동으로 계산해주는 프로그램을 만들지 않았다.

동혁이가 측정한 온도가 주어졌을 때, 변화한 온도를 구하는 프로그램을 작성하시오.

입력

입력은 동혁이가 측정한 혼합물의 온도가 순서대로 주어진다. 온도는 -10도와 200도 사이이고, 소수점 둘째짜리까지 적혀져 있을 수도 있다. 마지막 측정 후에는 999가 주어진다. 동혁이는 온도를 적어도 2번 측정했다.

출력

입력으로 주어진 각 온도와 이전 온도와의 차이를 출력한다. 첫 번째 측정할 온도는 이전 온도가 없으니 출력할 필요가 없다. 차이는 항상 소수점 둘째자리까지 출력한다.

예제 입력 1

10.0
12.05
30.25
20
999

예제 출력 1

2.05
18.20
-10.25

더보기

Solution

#include<stdio.h>

int main(void)
{
	float temperature[2];

	scanf("%f", &temperature[0]);
	scanf("%f", &temperature[1]);
	for(int i=2;temperature[(i-1)%2]!=999.0;i++)
	{
		printf("%.2f\n", temperature[(i-1)%2]-temperature[i%2]);
		scanf("%f", &temperature[i%2]);
	}

	return 0;
}
728x90

+ Recent posts