문제

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다. 상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다. 서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 어느 날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다.

내일은 일본과 국가대표 친선 경기가 있는 날이다. 상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.

국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.

상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

입력

첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

출력

상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

예제 입력 1

18
babic
keksic
boric
bukic
sarmic
balic
kruzic
hrenovkic
beslic
boksic
krafnic
pecivic
klavirkovic
kukumaric
sunkic
kolacic
kovacic
prijestolonasljednikovi

예제 출력 1

bk

더보기

Solution

#include<stdio.h>
#include<stdbool.h>

int main(void)
{
	int N, alphabet[26]={0, };
	bool five=false;

	scanf("%d", &N);

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

		scanf("%s", name);

		alphabet[name[0]-'a']++;

		if(alphabet[name[0]-'a']>=5)
			five=true;
	}

	if(five)
	{
		for(int i=0;i<26;i++)
			if(alphabet[i]>=5)
				printf("%c", 'a'+i);
		printf("\n");
	}
	else
		printf("PREDAJA\n");

	return 0;
}
728x90

문제

톰은 마트에서 치즈 1kg 을 사서 집으로 돌아왔습니다.

그런데 톰이 한눈을 판 사이 제리가 와서 A/B kg 만큼 훔쳐갔습니다.

제리가 치즈를 훔쳐 간 후 톰이 가지고 있는 치즈의 무게는 얼마인가요?

입력

첫 번째 줄에 두 정수 A, B (1 ≤ A < B ≤ 9) 가 주어집니다. 

A와 B는 서로소임이 보장됩니다.

출력

정답을 기약분수로 표현했을 때 P/Q kg 이라면 첫 번째 줄에 P와 Q를 공백을 사이에 두고 출력합니다. 

예제 입력 1

2 7

예제 출력 1

5 7

예제 입력 2

5 8

예제 출력 2

3 8

더보기

Solution

#include<stdio.h>

int main(void)
{
	int A, B;

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

	printf("%d %d\n", B-A, B);

	return 0;
}
728x90

문제

다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.

다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

입력

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

출력

첫째 줄에 필요한 세트의 개수를 출력한다.

예제 입력 1

9999

예제 출력 1

2

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N, max=0, number[10]={0, };

	scanf("%d", &N);

	number[0]+=N==0;

	while(N>0)
	{
		number[N%10]++;
		N/=10;
	}

	if((number[6]+number[9])%2==0)
		number[6]=number[9]=(number[6]+number[9])/2;
	else
	{
		number[6]+=number[9];
		number[9]=number[6]/2;
		number[6]-=number[9];
	}

	for(int i=0;i<10;i++)
		max=number[i]>max?number[i]:max;

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

	return 0;
}
728x90

문제

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

입력

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

출력

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

예제 입력 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++)
	{
		if(i%2==1)
			for(int j=0;j<N;j++)
				printf("* ");
		else
			for(int j=0;j<N;j++)
				printf(" *");
		printf("\n");
	}

	return 0;
}
728x90

문제

첫째 줄에는 별 2×N-1개, 둘째 줄에는 별 2×N-3개, ..., N번째 줄에는 별 1개를 찍는 문제

별은 가운데를 기준으로 대칭이어야 한다.

입력

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

출력

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

예제 입력 1

5

예제 출력 1

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

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N;

	scanf("%d", &N);

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

	return 0;
}
728x90

문제

옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.

길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.

S = A[0]*B[0] + ... + A[N-1]*B[N-1]

S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.

S의 최솟값을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다.

출력

첫째 줄에 S의 최솟값을 출력한다.

예제 입력 1

5
1 1 1 6 0
2 7 8 3 1

예제 출력 1

18

힌트

A를 {1, 1, 0, 1, 6}과 같이 재배열하면 된다.


더보기

Solution

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

int main(void)
{
	int N, *A=NULL, *B=NULL, S=0;

	scanf("%d", &N);
	A=(int *)malloc(N*sizeof(int));
	B=(int *)malloc(N*sizeof(int));

	for(int i=0;i<N;i++)
		scanf("%d", &A[i]);
	for(int i=0;i<N;i++)
		scanf("%d", &B[i]);

	for(int i=0;i<N-1;i++)
		for(int j=i+1;j<N;j++)
		{
			if(A[i]>A[j])
			{
				int temp=A[i];
				A[i]=A[j];
				A[j]=temp;
			}
			if(B[i]<B[j])
			{
				int temp=B[i];
				B[i]=B[j];
				B[j]=temp;
			}
		}

	for(int i=0;i<N;i++)
		S+=A[i]*B[i];

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

	free(A);
	free(B);
	return 0;
}
728x90

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

예제 입력 1

level

예제 출력 1

1

예제 입력 2

baekjoon

예제 출력 2

0

더보기

Solution

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

int main(void)
{
	char word[101]={'\0', };
	bool isPalindrome=true;

	scanf("%s", word);

	for(int i=0;i<strlen(word)/2;i++)
		if(word[i]!=word[strlen(word)-1-i])
		{
			isPalindrome=false;
			break;
		}

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

	return 0;
}
728x90

문제

X대학 M교수님은 프로그래밍 수업을 맡고 있습니다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있습니다.

교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하세요.

입력

입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)을 하나씩 입력합니다. 입력한 출석번호에 중복은 없으며, 순서에 상관없이 입력받을 수 있어야 합니다.

출력

출력은 2줄입니다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력하시면 됩니다.

예제 입력 1

3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

예제 출력 1

2
8

더보기

Solution

#include<stdio.h>

int main(void)
{
	int id[31]={0, };

	for(int i=0;i<28;i++)
	{
		int n;

		scanf("%d", &n);

		id[n]++;
	}

	for(int i=1;i<=30;i++)
		if(id[i]==0)
			printf("%d\n", i);

	return 0;
}
728x90

+ Recent posts