코드

 

#include <stdio.h>

int main(void)
{
	int a, b, x, k;
	int card[20];
	for(int z = 0; z < 20; z++){
		card[z] = z+1;
	}
	for(int i = 0; i < 10; i++){
		scanf("%d %d", &a, &b);
		k = 1;
		for(int j = a; j <= (a + b)/2; j++){
			x = card[j - 1];
			card[j - 1] = card[b - k];
			card[b- k] = x;
			k++;
		}
	}
	for(int p = 0; p < 20; p++){
		printf("%d ", card[p]);
	}
	return 0;
}

 

문제

 

1부터 20까지 숫자가 하나씩 쓰인 20장의 카드가 아래 그림과 같이 오름차순으로 한 줄로 놓여있다. 각 카드의 위치는 카드 위에 적힌 숫자와 같이 1부터 20까지로 나타낸다. 

이제 여러분은 다음과 같은 규칙으로 카드의 위치를 바꾼다: 구간 [a, b] (단, 1 ≤ a ≤ b ≤ 20)가 주어지면 위치 a부터 위치 b까지의 카드를 현재의 역순으로 놓는다.

예를 들어, 현재 카드가 놓인 순서가 위의 그림과 같고 구간이 [5, 10]으로 주어진다면, 위치 5부터 위치 10까지의 카드 5, 6, 7, 8, 9, 10을 역순으로 하여 10, 9, 8, 7, 6, 5로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다.

이 상태에서 구간 [9, 13]이 다시 주어진다면, 위치 9부터 위치 13까지의 카드 6, 5, 11, 12, 13을 역순으로 하여 13, 12, 11, 5, 6으로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다.

오름차순으로 한 줄로 놓여있는 20장의 카드에 대해 10개의 구간이 주어지면, 주어진 구간의 순서대로 위의 규칙에 따라 순서를 뒤집는 작업을 연속해서 처리한 뒤 마지막 카드들의 배치를 구하는 프로그램을 작성하시오.

 

입력

 

총 10개의 줄에 걸쳐 한 줄에 하나씩 10개의 구간이 주어진다. i번째 줄에는 i번째 구간의 시작 위치 ai와 끝 위치 bi가 차례대로 주어진다. 이때 두 값의 범위는 1 ≤ ai ≤ bi ≤ 20이다.

 

출력

 

1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다. 

 

예제 입력 1

 

5 10

9 13

1 2

3 4

5 6

1 2

3 4

5 6

1 20

1 20

 

예제 출력 1

 

1 2 3 4 10 9 8 7 13 12 11 5 6 14 15 16 17 18 19 20

 

예제 입력 2

 

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 10

 

예제 출력 2

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

 

문제 - https://www.acmicpc.net/problem/10804

'백준 문제풀이' 카테고리의 다른 글

[백준/c] 2738번 - 행렬 덧셈  (0) 2019.05.12
[백준/c] 1159번 - 농구 경기  (0) 2019.05.12
[백준/c] 2953번 - 나는 요리사다  (0) 2019.05.11
[백준/c] 2920번 - 음계  (0) 2019.05.10
[백준/c] 8958번 - OX퀴즈  (0) 2019.05.10
Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	int max = 0;
	int sum = 0;
	int line;
	int score[5][4];
	for(int i = 0; i < 5; i++){
		for(int o = 0; o < 4; o++){
			scanf("%d", &score[i][o]);
		}
	}
	for(int j = 0; j < 5; j++){
		for(int k = 0; k < 4; k++){
			sum += score[j][k];
		}
		if(max < sum){
			max = sum;
			line = j + 1;
		}
		sum = 0;
	}
	printf("%d %d", line, max);
	return 0; 
}

 

 

문제

 

"나는 요리사다"는 다섯 참가자들이 서로의 요리 실력을 뽐내는 티비 프로이다. 각 참가자는 자신있는 음식을 하나씩 만들어오고, 서로 다른 사람의 음식을 점수로 평가해준다. 점수는 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

 

문제 - https://www.acmicpc.net/source/12600447

'백준 문제풀이' 카테고리의 다른 글

[백준/c] 1159번 - 농구 경기  (0) 2019.05.12
[백준/c] 10804번 - 카드 역배치  (0) 2019.05.11
[백준/c] 2920번 - 음계  (0) 2019.05.10
[백준/c] 8958번 - OX퀴즈  (0) 2019.05.10
[백준/c] 1436번 - 영화감독 숌  (0) 2019.05.09
Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	int cnt = 0;
	int a[8];
	int asc[8] = {1, 2, 3, 4, 5, 6, 7, 8};
	int des[8] = {8, 7, 6, 5, 4, 3, 2, 1};
	for(int i = 0; i < 8; i++){
		scanf("%d", &a[i]);
	}
	for(int j = 0; j < 8; j++){
		if(a[j] != asc[j]){
			cnt++;
		}
	}
	if(cnt == 0){
		printf("ascending");
		return 0;
	}
	cnt = 0;
	for(int k = 0; k < 8; k++){
		if(a[k] != des[k]){
			cnt++;
		}
	}
	if(cnt == 0){
		printf("descending");
		return 0;
	}
	printf("mixed");
	return 0;
}

 

 

문제

 

다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.

1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.

연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.

 

출력

 

첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.

 

예제 입력 1

 

1 2 3 4 5 6 7 8

 

예제 출력 1

 

ascending

 

예제 입력 2

 

8 7 6 5 4 3 2 1

 

예제 출력 2

 

descending

 

예제 입력 3

 

8 1 7 2 6 3 5 4

 

예제 출력 3

 

mixed

 

문제 -

Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	char a[80];
	int i = 0;
	int j = 0;
	int k = 0;
	int sum = 0;
	int  n;
	scanf("%d", &n);
	for(k = 0; k < n; k++)
	{
	scanf("%s", &a);
		while(a[i] != 0)
		{
			if(a[i] == 'O')
			{
				j++;
				sum += j;
			}
			else
			{
				j = 0;
			}
			i++;
		}
		printf("%d\n", sum);
		i = 0;
		j = 0;
		sum = 0;
	}
	return 0;
}

 

문제

 

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

 

출력

 

각 테스트 케이스마다 점수를 출력한다.

 

예제 입력 1

 

5

OOXXOXXOOO

OOXXOOXXOO

OXOXOXOXOXOXOX

OOOOOOOOOO

OOOOXOOOOXOOOOX

 

예제 출력 1

 

10 9 7 55 30

 

문제 - https://www.acmicpc.net/problem/8958

Posted by hsoo3844

코드

 

#include <stdio.h>

int tya(int x)
{
	int cnt = 0;
	while(x){
		if(x%10 == 6){
			cnt++;
			if(cnt == 3){
				return 1;
			}
		}
		else{
			cnt = 0;
		}
		x /= 10;
	}
	return 0;
}

int main()
{
	int a, n = 0;
	scanf("%d", &a);
	for(int i = 0; i < 10000000; i++){
		if(tya(i)){
				n++;
				if(a == n){
					printf("%d", i);
					return 0;
				}
		}
	}
	return 0;
}

 

 

문제

 

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다.

하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.

따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다.

숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.

 

입력

 

첫째 줄에 숫자 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

 

출력

 

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

 

예제 입력 1

 

2

 

예제 출력 1

 

1666

 

문제 - https://www.acmicpc.net/problem/1436

'백준 문제풀이' 카테고리의 다른 글

[백준/c] 2920번 - 음계  (0) 2019.05.10
[백준/c] 8958번 - OX퀴즈  (0) 2019.05.10
[백준/c] 1978번 - 소수 찾기  (0) 2019.05.08
[백준/c] 14912번 - 숫자 빈도수  (0) 2019.05.08
[백준/c] 10818번 - 최소, 최대  (0) 2019.05.07
Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	int i, x, y;
	int days = 0;
	scanf("%d %d", &x, &y);
	if(x == 1)
	{
	 	 i++;	
	}
	for(i = 1; i < x; i++)
	{
		if(i == 1||i == 3||i == 5||i == 7||i == 8||i == 10||i == 12)
		{
			days += 31;
		}
		else if(i == 4||i == 6||i == 9||i == 11)
		{
			days += 30;
		}
		else if(i == 2)
		{
			days += 28;
		}
	}
	days += y;
	if(days%7 == 0)
	{
		printf("SUN");
	}
	else if(days%7 == 1)
	{
		printf("MON");
	}
	else if(days%7 == 2)
	{
		printf("TUE");
	}
	else if(days%7 == 3)
	{
		printf("WED");
		
	}
	else if(days%7 == 4)
	{
		printf("THU");
	}
	else if(days%7 == 5)
	{
		printf("FRI");
	}
	else if(days%7 == 6)
	{
		printf("SAT");
	}
	return 0;
}

 

문제

 

오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

 

출력

 

첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

 

예제 입력 1

 

1 1

 

예제 출력 1

 

MON

 

예제 입력 2

 

3 14

 

예제 출력 2

 

WED

 

예제 입력 3

 

9 2

 

예제 출력 3

 

SUN

 

예제 입력 4

 

12 25

 

예제 출력 4

 

TUE

 

문제 - https://www.acmicpc.net/problem/1924

Posted by hsoo3844
이전버튼 1 2 3 이전버튼