문제

타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.

예를 들어 입력된 예1의 경우에는 아래 그림에서 처럼 4개를 출력해야 한다.

입력

입력은 한줄로 이루어져있고, 타로가 지불할 돈(1 이상 1000미만의 정수) 1개가 쓰여져있다.

출력

제출할 출력 파일은 1행으로만 되어 있다. 잔돈에 포함된 매수를 출력하시오.

예제 입력 1

380

예제 출력 1

4

더보기

Solution

#include<stdio.h>

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

	scanf("%d", &price);
	price=1000-price;

	while(price>=500)
	{
		price-=500;
		count++;
	}
	while(price>=100)
	{
		price-=100;
		count++;
	}
	while(price>=50)
	{
		price-=50;
		count++;
	}
	while(price>=10)
	{
		price-=10;
		count++;
	}
	while(price>=5)
	{
		price-=5;
		count++;
	}

	printf("%d\n", count+price);

	return 0;
}
728x90

문제

JOI 상사는 직원의 근무시간을 타임 카드로 관리하고있다. 직원들은 전용 장비를 사용하여 타임 카드에 출근 시간을 기록한다. 근무를 마치고 퇴근할 때도 타임 카드에 퇴근 시간을 기록한다. 타임카드에서 사용하는 시간단위는 24 시간제를 사용한다.

보안상의 이유로 직원들의 출근 시간은 7시 이후이다. 또한, 모든 직원은 23시 이전에 퇴근한다. 직원의 퇴근 시간은 항상 출근 시간보다 늦다.

입력으로 JOI 상사의 3 명의 직원 A 씨, B 씨, C 씨의 출근 시간과 퇴근 시간이 주어 졌을 때 각 직원의 근무시간을 계산하는 프로그램을 작성하라.

입력

입력은 3 행으로 구성된다.

첫 번째 줄에는 A 씨의 출근 시간과 퇴근 시간,

두 번째 줄에는 B 씨의 출근 시간과 퇴근 시간,

세 번째 줄에는 C 씨의 출근 시간과 퇴근 시간이 각각 공백으로 구분되어 있다.

시간은 각각 공백으로 구분된 3 개의 정수로 쓰여져있다.

3 개의 정수 h(7 ≦ h ≦ 22), m(0 ≦ m ≦ 59), s(0 ≦ s ≦ 59)는 h시 m 분 s 초를 나타낸다.

출력

첫 번째 줄에 A 씨의 근무 시간,

두 번째 줄에 B 씨의 근무 시간,

세 번째 줄에 C 씨의 근무 시간을 출력하라.

근무 시간이 h 시간 m 분 s 초이면 h, m, s의 순으로 공백으로 분리하여 출력하라.

예제 입력 1

9 0 0 18 0 0
9 0 1 18 0 0
12 14 52 12 15 30

예제 출력 1

9 0 0
8 59 59
0 0 38

더보기

Solution

#include<stdio.h>

int main(void)
{
	for(int i=0;i<3;i++)
	{
		int time[2][3];

		for(int j=0;j<2;j++)
			for(int k=0;k<3;k++)
				scanf("%d", &time[j][k]);
		for(int j=0;j<3;j++)
			time[1][j]-=time[0][j];
		for(int j=2;j>0;j--)
			while(time[1][j]<0)
			{
				time[1][j]+=60;
				time[1][j-1]--;
			}

		printf("%d %d %d\n", time[1][0], time[1][1], time[1][2]);
	}

	return 0;
}
728x90

문제

새 학기를 맞아 상근이는 책을 10권 구입했다. 상근이는 의욕이 너무 앞서서 가격을 조사하지 않고 책을 구입했다. 이제 각 책의 가격을 알아보려고 한다.

하지만, 영수증에는 얼룩이 묻어있었고, 상근이는 책 10권 중 9권의 가격만 읽을 수 있었다.

책 10권의 총 가격과 가격을 읽을 수 있는 9권 가격이 주어졌을 때, 가격을 읽을 수 없는 책의 가격을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 10권의 총 가격이 주어진다. 둘째 줄부터 9개 줄에는 가격을 읽을 수 있는 책 9권의 가격이 주어진다. 책의 가격은 10000이하이다.

출력

첫째 줄에 가격을 읽을 수 없는 책의 가격을 출력한다.

예제 입력 1

9850
1050
800
420
380
600
820
2400
1800
980

예제 출력 1

600

더보기

Solution

#include<stdio.h>

int main(void)
{
	int total;

	scanf("%d", &total);

	for(int i=0;i<9;i++)
	{
		int price;

		scanf("%d", &price);

		total-=price;
	}

	printf("%d\n", total);

	return 0;
}
728x90

문제

상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를 왼쪽이나 오른쪽으로 이동할 수 있다. 하지만, 바구니는 스크린의 경계를 넘어가면 안 된다. 가장 처음에 바구니는 왼쪽 M칸을 차지하고 있다.

스크린의 위에서 사과 여러 개가 떨어진다. 각 사과는 N칸중 한 칸의 상단에서 떨어지기 시작하며, 스크린의 바닥에 닿을때까지 직선으로 떨어진다. 한 사과가 바닥에 닿는 즉시, 다른 사과가 떨어지기 시작한다.

바구니가 사과가 떨어지는 칸을 차지하고 있다면, 바구니는 그 사과가 바닥에 닿을 때, 사과를 담을 수 있다. 상근이는 사과를 모두 담으려고 한다. 이때, 바구니의 이동 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 M이 주어진다. (1 ≤ M < N ≤ 10) 둘째 줄에 떨어지는 사과의 개수 J가 주어진다. (1 ≤ J ≤ 20) 다음 J개 줄에는 사과가 떨어지는 위치가 순서대로 주어진다.

출력

모든 사과를 담기 위해서 바구니가 이동해야 하는 거리의 최솟값을 출력한다.

예제 입력 1

5 1
3
1
5
3

예제 출력 1

6

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N, M, basket_left=1, basket_right, J, count=0;

	scanf("%d %d", &N, &M);
	scanf("%d", &J);
	basket_right=M;

	for(int i=0;i<J;i++)
	{
		int apple_location;

		scanf("%d", &apple_location);

		while(!(apple_location<=basket_right && apple_location>=basket_left))
		{
			if(apple_location<basket_left)
			{
				basket_left--;
				basket_right--;
			}
			else
			{
				basket_left++;
				basket_right++;
			}
			count++;
		}
	}

	printf("%d", count);

	return 0;
}
728x90

문제

슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여져 있다. 이 버섯을 먹으면 점수를 받는다.

슈퍼 마리오는 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다.

중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다. 따라서 첫 버섯을 먹지 않았다면, 그 이후 버섯도 모두 먹을 수 없다.

마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 한다.

버섯의 점수가 주어졌을 때, 마리오가 받는 점수를 출력하는 프로그램을 작성하시오.

입력

총 10개의 줄에 각각의 버섯의 점수가 주어진다. 이 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.

출력

첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.

예제 입력 1

10
20
30
40
50
60
70
80
90
100

예제 출력 1

100

더보기

Solution

#include<stdio.h>

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

int main(void)
{
	int score[10], near=0, sum=0;

	for(int i=0;i<10;i++)
	{
		scanf("%d", &score[i]);

		sum+=score[i];
		near=abs(sum-100)<=abs(near-100)?sum:near;
	}

	printf("%d\n", near);

	return 0;
}
728x90

문제

"나는 요리사다"는 다섯 참가자들이 서로의 요리 실력을 뽐내는 티비 프로이다. 각 참가자는 자신있는 음식을 하나씩 만들어오고, 서로 다른 사람의 음식을 점수로 평가해준다. 점수는 1점부터 5점까지 있다.

각 참가자가 얻은 점수는 다른 사람이 평가해 준 점수의 합이다. 이 쇼의 우승자는 가장 많은 점수를 얻은 사람이 된다.

각 참가자가 얻은 평가 점수가 주어졌을 때, 우승자와 그의 점수를 구하는 프로그램을 작성하시오.

입력

총 다섯 개 줄에 각 참가자가 얻은 네 개의 평가 점수가 공백으로 구분되어 주어진다. 첫 번째 참가자부터 다섯 번째 참가자까지 순서대로 주어진다. 항상 우승자가 유일한 경우만 입력으로 주어진다.

출력

첫째 줄에 우승자의 번호와 그가 얻은 점수를 출력한다.

예제 입력 1

5 4 4 5
5 4 4 4
5 5 4 4
5 5 5 4
4 4 4 5

예제 출력 1

4 19

더보기

Solution

#include<stdio.h>

int main(void)
{
	int score[5][4], max=0, max_index;

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

	for(int i=0;i<5;i++)
	{
		int sum=0;

		for(int j=0;j<4;j++)
			sum+=score[i][j];

		max_index=max>sum?max_index:i+1;
		max=max>sum?max:sum;
	}

	printf("%d %d\n", max_index, max);

	return 0;
}
728x90

문제

4 × 3 = 12이다.

이 식을 통해 다음과 같은 사실을 알 수 있다.

3은 12의 약수이고, 12는 3의 배수이다.

4도 12의 약수이고, 12는 4의 배수이다.

두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.

  1. 첫 번째 숫자가 두 번째 숫자의 약수이다.
  2. 첫 번째 숫자가 두 번째 숫자의 배수이다.
  3. 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다.

입력

입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.

출력

각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.

예제 입력 1

8 16
32 4
17 5
0 0

예제 출력 1

factor
multiple
neither

더보기

Solution

#include<stdio.h>

int main(void)
{
	int num1, num2;

	scanf("%d %d", &num1, &num2);

	while(num1!=0 || num2!=0)
	{
		printf("%s\n", num1<num2&&num2%num1==0?"factor":num1>num2&&num1%num2==0?"multiple":"neither");

		scanf("%d %d", &num1, &num2);
	}

	return 0;
}
728x90

문제

두 숫자 R1과 R2가 있을 때, 두 수의 평균 S는 (R1+R2)/2와 같다. 상근이는 정인이 생일 선물로 두 숫자 R1과 R2를 주려고 한다. 생일 파티에서 상근이는 정인이에게 이 두 숫자를 말해주고, 정인이는 이 숫자를 받아 적는다. 그리고 나서 기쁜 마음으로 1년동안 이 숫자를 외우면서 산다.

상근이는 R1과 R2를 엄청난 고민 끝에 정했다. 작년에는 R1과 R2를 까먹어서 아무 숫자나 정해서 주었기 때문에, 올해는 까먹지 않기 위해서 평균 S도 같이 기억하려고 한다.

오늘은 정인이 생일이다. 5분 후에 상근이는 생일 선물로 두 숫자 R1과 R2를 말해주어야 하지만, 안타깝게도 R2를 까먹고 말았다. 하지만 R1과 S는 기억하고 있다!

상근이를 도와 R2가 몇 인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 두 정수 R1과 S가 주어진다. 두 수는 -1000보다 크거나 같고, 1000보다 작거나 같다.

출력

첫째 줄에 R2를 출력한다.

예제 입력 1

11 15

예제 출력 1

19

더보기

Solution

#include<stdio.h>

int main(void)
{
	int R1, S;

	scanf("%d %d", &R1, &S);

	printf("%d\n", 2*S-R1);

	return 0;
}
728x90

+ Recent posts