문제

JOI 군은 식사 준비를 위해 A℃의 고기를 전자레인지로 B℃까지 데우려고 한다. 고기는 온도가 0℃보다 낮을 때 얼어 있고, 0℃보다 높을 때는 얼어 있지 않다. 온도가 정확히 0℃일 때 고기는 얼어 있을 수도, 얼어 있지 않을 수도 있다.

JOI 군은 가열할 때 고기가 아래의 규칙을 따라 데워진다고 가정하고, 고기를 데우는 데 걸리는 시간을 어림하기로 했다.

  • 고기가 얼어 있고 온도가 0℃ 미만일 때 : 온도가 C초에 1℃씩 오른다.
  • 고기가 얼어 있고 온도가 정확히 0℃일 때 : 얼어 있지 않은 상태로 만드는(해동하는) 데 D초가 걸린다.
  • 고기가 얼어 있지 않을 때 : 온도가 E초에 1℃씩 오른다.

이 규칙을 토대로, 고기가 B℃까지 데워지는 데 몇 초가 걸리는지 구하라.

입력

입력은 총 5줄로, 한 줄에 한 개씩의 정수가 주어진다.

  • 첫 줄에는 원래의 고기의 온도 A가 주어진다. 단, A는 -100 이상 100 이하이며, 0이 아니다.
  • 둘째 줄에는 목표 온도 B가 주어진다. 단, B는 1 이상 100 이하이며, A보다 크다.
  • 셋째 줄에는 얼어 있는 고기를 1℃ 데우는 데 걸리는 시간 C가 주어진다.
  • 넷째 줄에는 얼어 있는 고기를 해동하는 데 걸리는 시간 D가 주어진다.
  • 다섯째 줄에는 얼어 있지 않은 고기를 1℃ 데우는 데 걸리는 시간 E가 주어진다.

C, D, E는 모두 1 이상 100 이하이다.

출력

고기를 B℃로 데우는 데 걸리는 시간을 초 단위로 한 줄에 출력하라.

예제 입력 1

-10
20
5
10
3

예제 출력 1

120

예제 입력 2

35
92
31
50
11

예제 출력 2

627

힌트

예제 입출력 1에서, 원래의 고기는 -10℃로 얼어 있다. 걸리는 시간은 아래와 같다.

  • -10℃에서 0℃까지 데우는 데 5×10=50 초
  • 0℃인 고기를 해동하는 데 10 초
  • 0℃에서 20℃까지 데우는 데 3×20=60 초

따라서, 걸리는 시간은 총 120초이다.

예제 입출력 2에서 원래의 고기는 얼어 있지 않다. 따라서 고기를 35℃에서 92℃까지 데우는 데 걸리는 시간은 627초이다.


더보기

Solution

#include<stdio.h>

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

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

	if(A<=0)
		printf("%d\n", -A*C+D+B*E);
	else
		printf("%d\n", E*(B-A));

	return 0;
}
728x90

문제

알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.

한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.

출력

입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.

예제 입력 1

BaekjoonOnlineJudge

예제 출력 1

BaekjoonOn
lineJudge

예제 입력 2

OneTwoThreeFourFiveSixSevenEightNineTen

예제 출력 2

OneTwoThre
eFourFiveS
ixSevenEig
htNineTen

더보기

Solution

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

int main(void)
{
	char str[101]={'\0', };

	scanf("%s", str);

	for(int i=0;i<strlen(str);i++)
	{
		printf("%c", str[i]);

		if(i%10==9)
			printf("\n");
	}

	return 0;
}
728x90

문제

예로부터 동아시아에서는 십간(十干)과 십이지(十二支)를 사용하여 연도를 표시하였다. 십간은 "갑을병정무기경신임계"를 말하며 십이지는 "자축인묘진사오미신유술해"를 말한다. 십간과 십이지로 구성된 간지를 사용하여 60년을 주기로 각 연도에 다음과 같이 이름을 부여한다: 최초 1년째는 "갑자"이고, 2년째는 "을축", 3년째는 "병인" 과 같이 올해의 간지에서 십간과 십이지의 다음 문자를 이듬해의 간지로 사용한다. 십간은 10년을 주기로, 십이지는 12년을 주기로 순환된다. 이런 순서로 하여 마지막 "계해"는 60년째를 나타내고, 61년째는 다시 "갑자"가 된다.

60갑자를 서양식으로 나타내기 위해 

  1. 십간을 0부터 9까지의 정수로 표현하고 
  2. 십이지를 "ABCDEFGHIJKL"로 표현하고
  3. 십간과 십이지의 순서를 바꾼다고 하자.

이를 서양식 간지 표현법이라고 부르자. 예를 들면, "갑자"는 "A0"로 "을축"은 "B1", "계해"는 "L9"으로 표현된다. 2013년은 계사년이므로 "F9"으로 표현되고, 2014년은 갑오년으로 "G0" 로 표현된다.

입력으로 주어진 연도를 서양식 간지 표현법으로 나타낸 것을 출력하는 프로그램을 작성하시오.

입력

한 줄에 연도를 나타내는 1개의 정수 N 이 주어진다. 단, 1 ≤ N ≤ 1,000,000 이다.

출력

입력으로 주어진 연도 N을 서양식 간지 표현법으로 표현한 문자열을 한 줄에 출력한다. 2013년이 "F9"로 표현된다는 사실을 이용하시오.

예제 입력 1

2060

예제 출력 1

E6

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N;

	scanf("%d", &N);

	printf("%c%d\n", 'A'+(N+8)%12, (N+6)%10);

	return 0;
}
728x90

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

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

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

예제 입력 1

1

예제 출력 1

*

예제 입력 2

2

예제 출력 2

 *
* *

예제 입력 3

3

예제 출력 3

  *
 * *
* * *

예제 입력 4

4

예제 출력 4

   *
  * *
 * * *
* * * *

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N;

	scanf("%d", &N);

	for(int i=1;i<=N;i++)
	{
		for(int j=0;i+j<N;j++)
			printf(" ");
		for(int j=0;j<i;j++)
			printf("* ");
		printf("\n");
	}

	return 0;
}
728x90

문제

JOI군이 살고 있는 지역에는 X사와 Y사, 두 개의 수도회사가 있다. 두 회사의 수도요금은 한 달간 수도의 사용량에 따라 다음과 같이 정해진다.

  • X사 : 1리터당 A엔.
  • Y사 : 기본요금은 B엔이고, 사용량이 C리터 이하라면 요금은 기본요금만 청구된다. 사용량이 C리터가 넘었을 경우 기본요금 B엔에 더해서 추가요금이 붙는다. 추가요금은 사용량이 C리터를 넘었을 경우 1리터를 넘었을 때마다 D엔이다.

JOI군의 집에서 한 달간 쓰는 수도의 양은 P리터이다.

수도요금이 최대한 싸게 되도록 수도회사를 고를 때, JOI군의 집의 1달간 수도요금을 구하여라.

입력

입력은 5줄이고 한 줄에 하나씩 정수가 입력된다.

  • 첫 번째 줄에는 X사의 1리터당 요금 A가 입력된다.
  • 두 번째 줄에는 Y사의 기본요금 B가 입력된다.
  • 세 번째 줄에는 Y사의 요금이 기본요금이 되는 사용량의 상한 C가 입력된다.
  • 네 번째 줄에는 Y사의 1리터 당 추가요금 D가 입력된다.
  • 다섯 번째 줄에는 JOI군의 집에서 사용하는 한 달간 수도의 양 P가 입력된다.

입력되는 정수 A,B,C,D,P는 전부 1 이상 10000 이하이다.

출력

JOI군의 집에서 지불하는 한 달간 수도요금을 첫째 줄에 출력한다.

예제 입력 1

9
100
20
3
10

예제 출력 1

90

예제 입력 2

8
300
100
10
250

예제 출력 2

1800

힌트

입출력예제 1에서, JOI군의 집에서 사용하는 수도의 양은 10리터이다.

  • X사의 수도요금은 9 × 10 = 90엔이다.
  • JOI군의 집에서 사용한 양이 20리터 이하이므로 Y사의 수도요금은 기본요금인 100엔이다.

JOI군의 집은 수도요금이 더 싼 X사를 고르고, 이때의 한 달치 수도요금은 90엔이다.

입출력예제 2에서, JOI군의 집에서 사용하는 수도의 양은 250리터이다.

  • X사의 수도요금은 8 × 250 = 2000엔이다.
  • JOI군의 집에서 사용한 양이 100리터 이상이므로 초과량은 250 - 100 = 150리터이다. 따라서 Y사의 수도요금은 기본요금인 300엔에 더해서 10 × 150 = 1500엔의 추가요금이 붙고, 총 요금은 300 + 1500 = 1800엔이 된다.

JOI군의 집은 수도요금이 더 싼 Y사를 고르고, 이때의 한 달치 수도요금은 1800엔이다.


더보기

Solution

#include<stdio.h>

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

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

	A*=P;
	B=P<C?B:B+D*(P-C);

	printf("%d\n", A<B?A:B);

	return 0;
}
728x90

문제

서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하지 못한다. 또한, 자동차 번호의 일의 자리 숫자가 0이면 10일, 20일, 30일에 운행하지 못한다.

여러분들은 일일 경찰관이 되어 10부제를 위반하는 자동차의 대수를 세는 봉사활동을 하려고 한다. 날짜의 일의 자리 숫자가 주어지고 5대의 자동차 번호의 일의 자리 숫자가 주어졌을 때 위반하는 자동차의 대수를 출력하면 된다. 

입력

첫 줄에는 날짜의 일의 자리 숫자가 주어지고 두 번째 줄에는 5대의 자동차 번호의 일의 자리 숫자가 주어진다. 날짜와 자동차의 일의 자리 숫자는 모두 0에서 9까지의 정수 중 하나이다. 

출력

주어진 날짜와 자동차의 일의 자리 숫자를 보고 10부제를 위반하는 차량의 대수를 출력한다.

예제 입력 1

1
1 2 3 4 5

예제 출력 1

1

예제 입력 2

3
1 2 3 5 3

예제 출력 2

2

예제 입력 3

5
1 3 0 7 4

예제 출력 3

0

더보기

Solution

#include<stdio.h>

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

	scanf("%d", &date);

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

		scanf("%d", &car);

		count+=date==car;
	}

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

	return 0;
}
728x90

문제

그릇을 바닥에 놓았을 때 그 높이는 10cm 이다. 그런데 두 개의 그릇을 같은 방향으로 포개면 그 높이는 5cm만 증가된다. 만일 그릇이 서로 반대방향으로 쌓이면 높이는 그릇만큼, 즉 10cm 늘어난다. 그릇을 괄호 기호로 나타내어 설명해보자. 편의상 그릇이 쌓여지는 방향은 왼쪽에서 오른쪽이라고 가정한다. 그림에서 ‘(’은 그릇이 바닥에 바로 놓인 상태를 나타내며, ‘)’은 그릇이 거꾸로 놓인 상태를 나타낸다.

만일 그릇이 포개진 모양이 아래 그림 1(a)와 같다면 전체의 높이는 25cm가 된다. 왜냐하면 처음 바닥에 있는 그릇의 높이가 10cm이고 이후 같은 방향으로 3개의 그릇이 포개져 있으므로 늘어난 높이는 5+5+5=15 이기 때문이다. 그림 1(b)와 같은 경우라면 그 높이는 10*4=40cm가 된다.

여러분은 입력에 주어진 모양대로 그릇을 쌓을 때 최종의 전체 그릇 높이를 계산해서 출력해야 한다. 즉 처음 입력으로 주어진 각 그릇의 방향은 바꿀 수 없다. 

입력

첫 줄에는 괄호문자로만 이루어진 문자열이 주어진다. 입력 문자열에서 열린 괄호 ‘(’은 바로 놓인 그릇, 닫힌 괄호 ‘)’은 거꾸로 놓인 그릇을 나타난다. 문자열의 길이는 3이상 50 이하이다.

출력

여러분은 그릇 방향이 괄호 문자로 표시된 문자열을 읽어서 그 최종의 높이를 정수로 출력해야 한다.

예제 입력 1

((((

예제 출력 1

25

더보기

Solution

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

int main(void)
{
	int count=10;
	char plate[51]={'\0', };

	scanf("%s", plate);

	for(int i=1;i<strlen(plate);i++)
		count+=plate[i]==plate[i-1]?5:10;

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

	return 0;
}
728x90

문제

승균이는 매일 학교, PC방, 학원에 다닌다. 반복되는 일상에 익숙해진 승균이는 이동시간을 단축해서 PC방에 더 오래 머물고 싶었다. 그래서 스톱워치를 들고 이동할 때마다 기록을 잰 후 집에 가서 분석해보기로 했다.

집에 도착한 승균이는 측정한 결과를 보는 데, 전부 초 단위로 기록되어있다! 맨날 놀기만 해서 총 이동 시간이 몇 분 몇 초인지 계산을 못 하는 승균이를 도와주자.

하루 동안 측정한 결과가 주어지면, 이날의 총 이동 시간이 몇 분 몇 초인지 출력하는 프로그램을 작성하시오.

입력

입력은 총 4줄이며, 한 줄에 하나씩 양의 정수가 적혀있다.

  • 첫 번째 줄에 집에서 학교까지의 이동 시간을 나타내는 초가 주어진다.
  • 두 번째 줄에 학교에서 PC방까지의 이동 시간을 나타내는 초가 주어진다.
  • 세 번째 줄에 PC방에서 학원까지의 이동 시간을 나타내는 초가 주어진다. 
  • 마지막 줄에 학원에서 집까지의 이동 시간을 나타내는 초가 주어진다.

집에 늦게 가면 혼나기 때문에, 총 이동시간은 항상 1 분 0 초 이상 59 분 59 초 이하이다.

출력

총 이동시간 x 분 y 초를 출력한다. 첫 번째 줄에 x를, 두 번째 줄에 y를 출력한다.

예제 입력 1

31
34
7
151

예제 출력 1

3
43

더보기

Solution

#include<stdio.h>

int main(void)
{
	int x, y=0;

	for(int i=0;i<4;i++)
	{
		scanf("%d", &x);

		y+=x;
	}

	printf("%d\n%d\n", y/60, y%60);

	return 0;
}
728x90

+ Recent posts