문제

어벤져스: 엔드게임》(영어: Avengers: Endgame)은 2019년 개봉한 미국의 슈퍼히어로 영화로, 마블 코믹스의 동명 팀을 원작으로 하고 있으며, 마블 스튜디오가 제작하고, 월트 디즈니 스튜디오스 모션 픽처스가 배급하였다. 이 영화는 2012년 영화 어벤져스와, 2015년 영화 어벤져스: 에이지 오브 울트론, 2018년 영화 어벤져스: 인피니티 워의 속편이자, 마블 시네마틱 유니버스 (MCU)의 22번째 작품에 해당한다. 앤서니 루소와 조 루소가 감독하고 크리스토퍼 마커스와 스티븐 맥필리가 공동으로 각본을 썼으며, 이전의 MCU 영화에보다도 많은 배우와 앙상블 캐스트들이 등장한다.

그래서 욱제는 이 문제에서 엔드게임 스포일러를 하려고 한다.

입력

어벤져스: 엔드게임의 줄거리가 주어진다.

출력

어벤져스: 엔드게임의 영문 표기를 출력한다.

예제 입력 1

타노스가 전 우주의 모든 생명체 절반을 제거하기 위해 인피니티 건틀렛을

예제 출력 1

문제의 답을 출력한다.

더보기

Solution

#include<stdio.h>

int main(void)
{
	printf("Avengers: Endgame\n");

	return 0;
}
728x90

문제

정휘는 애니메이션계의 영원한 명작이자 최고의 흥행작 겨울왕국 2를 자그마치 싱어롱으로 관람하려고 한다!

겨울왕국에 등장하는 캐릭터 중 엘사를 너무 좋아하는 정휘는 L4, 즉 L열의 네 번째 자리에 앉으려고 한다.

그러나 정휘가 가려는 영화관은 좌석 번호가 자연수 하나로 표현되기 때문에 예매를 하기가 힘들다.

정휘가 겨울왕국을 관람하는 영화관은 세로로 N칸, 가로로 M칸인 좌석들로 구성되어 있다. 

좌석의 번호는 좌상단 끝에 있는 A열의 첫 번째 자리부터 1번으로 시작하여 오른쪽으로 번호가 하나씩 증가하다가 끝에 다다르면 B열의 첫 번째 자리부터 또 오른쪽으로, C열의 첫 번째 자리부터 또 오른쪽으로 진행하는 것을 반복하면서 숫자가 증가해 나간다.

정휘가 좌석 L4를 빠르게 선점하여 Show Yourself를 신나게 부를 수 있도록 L열의 네 번째 자리의 좌석 번호를 구해주자.

입력

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

각 테스트 케이스는 한 줄로 구성되며, 각각 두 개의 자연수 N, M(1 ≤ N ≤ 26, 1 ≤ M ≤ 9)이 주어진다. N은 영화관 자리의 열 개수, M은 영화관 한 열에 속한 좌석 개수를 의미한다.

아래 사진은 N = 4, M = 6인 경우이다.

출력

각 테스트 케이스에 대해, 한 줄에 하나씩 L열의 네 번째 자리의 좌석 번호를 출력한다. 만약 영화관에 L열 네 번째 자리가 존재하지 않는다면 -1을 출력한다.

예제 입력 1

1
13 4

예제 출력 1

48

예제 입력 2

2
13 5
10 9

예제 출력 2

59
-1

노트

L4

TMI) 출제자는 겨울왕국2를 아직도 보지 않았습니다.


더보기

Solution

#include<stdio.h>

int main(void)
{
	int T;

	scanf("%d", &T);

	for(int t=0;t<T;t++)
	{
		int N, M;

		scanf("%d %d", &N, &M);

		printf("%d\n", (N>=12&&M>=4)?11*M+4:-1);
	}

	return 0;
}
728x90

문제

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

입력

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

출력

규칙대로 별을 출력한다.

예제 입력 1

2

예제 출력 1

** **
 ***
** **

예제 입력 2

5

예제 출력 2

*****       *****
 *   *     *   *
  *   *   *   *
   *   * *   *
    *   *   *
   *   * *   *
  *   *   *   *
 *   *     *   *
*****       *****

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N, i, j;

	scanf("%d", &N);

	for(i=0;i<N;i++)
		printf("*");
	for(i=0;i<2*N-3;i++)
		printf(" ");
	for(i=0;i<N;i++)
		printf("*");
	printf("\n");

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

	for(i=1;i<N;i++)
		printf(" ");
	printf("*");
	for(i=1;i<N-1;i++)
		printf(" ");
	printf("*");
	for(i=1;i<N-1;i++)
		printf(" ");
	printf("*");
	printf("\n");

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

	for(i=0;i<N;i++)
		printf("*");
	for(i=0;i<2*N-3;i++)
		printf(" ");
	for(i=0;i<N;i++)
		printf("*");
	printf("\n");

	return 0;
}

2

728x90

문제

꿍은 군대에서 진짜 할짓이 없다. 그래서 꿍만의 피보나치를 만들어보려고 한다. 기존의 피보나치는 너무 단순해서 꿍은 좀더 복잡한 피보나치를 만들어보고자 한다. 그래서 다음과 같은 피보나치를 만들었다. 꿍만의 피보나치 함수가 koong(n)이라고 할 때,

n < 2 :                         1
n = 2 :                         2
n = 3 :                         4
n > 3 : koong(n − 1) + koong(n − 2) + koong(n − 3) + koong(n − 4)

이다.

여러분도 꿍 피보나치를 구해보아라.

입력

입력의 첫 번째 줄을 테스트 케이스의 개수 t (0 < t < 69)가 주어진다. 다음 t줄에는 몇 번째 피보나치를 구해야하는지를 나타내는 n(0 ≤ n ≤ 67)이 주어진다.

출력

각 테스트 케이스에 대해, 각 줄에 꿍 피보나치값을 출력하라.

예제 입력 1

8
0
1
2
3
4
5
30
67

예제 출력 1

1
1
2
4
8
15
201061985
7057305768232953720

더보기

Solution

#include<stdio.h>

long long int koongFibonacci[68]={0, };

long long int koong(int N)
{
	if(koongFibonacci[N]!=0)
		return koongFibonacci[N];
	koongFibonacci[N]=koong(N-1)+koong(N-2)+koong(N-3)+koong(N-4);
	return koongFibonacci[N];
}

int main(void)
{
	int t, n;

	koongFibonacci[0]=koongFibonacci[1]=1;
	koongFibonacci[2]=2;
	koongFibonacci[3]=4;

	scanf("%d", &t);
	for(int i=0;i<t;i++)
	{
		scanf("%d", &n);
		printf("%lld\n", koong(n));
	}

	return 0;
}
728x90

문제

정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여덟 가지이다.

  • push_front X: 정수 X를 덱의 앞에 넣는다.
  • push_back X: 정수 X를 덱의 뒤에 넣는다.
  • pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 덱에 들어있는 정수의 개수를 출력한다.
  • empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
  • front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

예제 입력 1

15
push_back 1
push_front 2
front
back
size
empty
pop_front
pop_back
pop_front
size
empty
pop_back
push_front 3
empty
front

예제 출력 1

2
1
2
0
2
1
-1
0
1
-1
0
3

예제 입력 2

22
front
back
pop_front
pop_back
push_front 1
front
pop_back
push_back 2
back
pop_front
push_front 10
push_front 333
front
back
pop_back
pop_back
push_back 20
push_back 1234
front
back
pop_back
pop_back

예제 출력 2

-1
-1
-1
-1
1
1
2
2
333
10
10
333
20
1234
1234
20

더보기

Solution

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

typedef int element;
typedef struct DlistNode
{
	element data;
	struct DlistNode *llink;
	struct DlistNode *rlink;
}
DlistNode;

void init(DlistNode *phead)
{
	phead->llink=phead;
	phead->rlink=phead;
	phead->data=-1;
}

void push_front(DlistNode *before,DlistNode *new_node)
{
	while(before->llink->data!=-1)
		before=before->llink;

	new_node->llink=before->llink;
	new_node->rlink=before;

	before->llink->rlink=new_node;
	before->llink=new_node;
}

void push_back(DlistNode *before,DlistNode *new_node)
{
	while(before->rlink->data!=-1)
		before=before->rlink;

	new_node->llink=before;
	new_node->rlink=before->rlink;

	before->rlink->llink=new_node;
	before->rlink=new_node;
}

void dremove_node(DlistNode *phead_node,DlistNode *removed)
{
	if(removed==phead_node)
		return;

	removed->llink->rlink=removed->rlink;
	removed->rlink->llink=removed->llink;

	free(removed);
}

int pop_front(DlistNode *phead_node)
{
	int N=phead_node->rlink->data;

	dremove_node(phead_node,phead_node->rlink);
	return N;
}

int pop_back(DlistNode *phead_node)
{
	int N=phead_node->llink->data;

	dremove_node(phead_node,phead_node->llink);
	return N;
}

int front(DlistNode *phead_node)
{
	return phead_node->rlink->data;
}

int back(DlistNode *phead_node)
{
	return phead_node->llink->data;
}

int main(void)
{
	DlistNode head_node, **deque=NULL;
	int N, size=0, num;

	scanf("%d", &N);
	while(getchar()!='\n');

	deque=(DlistNode **)malloc(sizeof(DlistNode *)*N);
	init(&head_node);

	for(int i=0;i<N;i++)
	{
		char command[30]={'\0', };

		fgets(command,sizeof(command),stdin);
		deque[i]=(DlistNode *)malloc(sizeof(DlistNode));

		if(strncmp(command,"push_front",10)==0)
		{
			for(int j=11;command[j]!='\0';j++)
				command[j-11]=command[j];

			deque[i]->data=atoi(command);
			push_front(&head_node,deque[i]);
			size++;
		}
		else if(strncmp(command,"push_back",9)==0)
		{
			for(int j=10;command[j]!='\0';j++)
				command[j-10]=command[j];

			deque[i]->data=atoi(command);
			push_back(&head_node,deque[i]);
			size++;
		}
		else if(strncmp(command,"pop_front",9)==0)
		{
			num=pop_front(&head_node);
			printf("%d\n", num);
			free(deque[i]);
			size-=num!=-1;
		}
		else if(strncmp(command,"pop_back",8)==0)
		{
			num=pop_back(&head_node);
			printf("%d\n", num);
			free(deque[i]);
			size-=num!=-1;
		}
		else if(strncmp(command,"size",4)==0)
		{
			printf("%d\n", size);
			free(deque[i]);
		}
		else if(strncmp(command,"front",5)==0)
		{
			printf("%d\n", front(&head_node));
			free(deque[i]);
		}
		else if(strncmp(command,"back",4)==0)
		{
			printf("%d\n", back(&head_node));
			free(deque[i]);
		}
		else if(strncmp(command,"empty",5)==0)
		{
			printf("%d\n", size==0);
			free(deque[i]);
		}
		else
		{
			printf("error\n");
			free(deque[i]);
		}
	}

	return 0;
}
728x90

문제

이 문제를 푸는 자 우주를 정ㅋ벅ㅋ한다.

입력

우주를 정ㅋ벅ㅋ하는 자에겐 입력 따위 필요 없다.

출력

첫째 줄에 문제의 정답을 출력한다.

예제 입력 1

 

예제 출력 1

 

힌트

우주를 정ㅋ벅ㅋ할 사람에게는 예제 입력과 예제 출력이 필요하지 않다.


더보기

Solution

#include<stdio.h>

int main(void)
{
	printf("문제의 정답");

	return 0;
}
728x90

문제

수현이는 4차 산업혁명 시대에 살고 있는 중학생이다. 코로나 19로 인해, 수현이는 버추얼 학교로 버추얼 출석해 버추얼 강의를 듣고 있다. 수현이의 버추얼 선생님은 문자가 2개인 연립방정식을 해결하는 방법에 대해 강의하고, 다음과 같은 문제를 숙제로 냈다.

다음 연립방정식에서 x y의 값을 계산하시오.

{ax+by=c

{dx+ey=f

4차 산업혁명 시대에 숙제나 하고 앉아있는 것보다 버추얼 친구들을 만나러 가는 게 더 가치있는 일이라고 생각했던 수현이는 이런 연립방정식을 풀 시간이 없었다. 다행히도, 버추얼 강의의 숙제 제출은 인터넷 창의 빈 칸에 수들을 입력하는 식이다. 각 칸에는 −999 이상 999 이하의 정수만 입력할 수 있다. 수현이가 버추얼 친구들을 만나러 버추얼 세계로 떠날 수 있게 도와주자.

입력

정수 a, b, c, d, e, f가 공백으로 구분되어 차례대로 주어진다. (−999≤a,b,c,d,e,f≤999)

문제에서 언급한 방정식을 만족하는 (x,y)가 유일하게 존재하고, 이 때 x y가 각각 −999 이상 999 이하의 정수인 경우만 입력으로 주어짐이 보장된다.

출력

문제의 답인 x y를 공백으로 구분해 출력한다.

예제 입력 1

1 3 -1 4 1 7

예제 출력 1

2 -1

예제 입력 2

2 5 8 3 -4 -11

예제 출력 2

-1 2

더보기

Solution

#include<stdio.h>

int main(void)
{
	int a, b, c, d, e, f;

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

	printf("%d %d\n", (b*f-c*e)/(b*d-a*e), (a*f-c*d)/(a*e-b*d));

	return 0;
}
728x90

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1

5
5
2
3
4
1

예제 출력 1

1
2
3
4
5

비슷한 문제

<백준 알고리즘> 2751번: 수 정렬하기 2

<백준 알고리즘> 10989번: 수 정렬하기 3


더보기

Solution

#include<stdio.h>
#include<stdlib.h>
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))

int partition(int list[],int left,int right)
{
	int pivot=list[left], temp, low=left, high=right+1;

	do
	{
		do
			low++;
		while(low<=right&&list[low]<pivot);
		do
			high--;
		while(high>=left&&list[high]>pivot);

		if(low<high)
			SWAP(list[low],list[high],temp);
	}
	while(low<high);

	SWAP(list[left],list[high],temp);

	return high;
}

void quick_sort(int list[],int left,int right)
{
	if(left<right)
	{
		int q=partition(list,left,right);
		quick_sort(list,left,q-1);
		quick_sort(list,q+1,right);
	}
}
int main(void)
{
	int N, *list=NULL;

	scanf("%d", &N);

	list=(int *)malloc(N*sizeof(int));

	for(int i=0;i<N;i++)
		scanf("%d", list+i);

	quick_sort(list,0,N-1);

	for(int i=0;i<N;i++)
		printf("%d\n", *(list+i));

	free(list);
	return 0;

}
728x90

+ Recent posts