문제

구단이 성적을 내지 못한다면 답은 새 선수 영입뿐이다. 이것은 오늘날 유럽 리그에서 가장 흔한 전략이고, 노르웨이의 로젠버그 팀은 이러한 전략이 성공한 대표적 예시다. 그들은 많은 스카우터들을 지구 곳곳에 파견해 가능성 있는 루키를 찾는다.

현재 첼시는 프리미어 리그에서 헤매고 있고, 결국 새로운 선수를 사기로 결정했다. 하지만 그들은 스카우터를 기다리기 지쳤고, 훨씬 더 효율적인 전략을 개발해냈다. "만약 무언가 팔리고 있다면, 그것에는 합당한 이유가 있다"는 배룸의 명언이 바로 그것이다. 축구에서 이 말은 곧 가장 비싼 선수가 가장 좋은 선수라는 이야기가 된다. 

이에 따라 새로운 선수를 찾는 방법은 단순히 구단들에게 전화를 걸어 그들의 가장 비싼 선수를 사는게 되었다. 당신의 임무는 첼시가 리스트에서 가장 비싼 선수를 찾아낼 수 있도록 돕는 것이다.

입력

첫 번째 줄에는 테스트 케이스의 개수 n이 주어진다 (n≤100). 

각 테스트 케이스의 첫 번째 줄 p는 고려해야될 선수의 수이다 (1≤p≤100).  

그 아래 p개의 줄에는 선수의 정보가 표시된다. 

각각의 줄은 선수의 가격 C 와 이름을 입력한다 (C<2*10^9).

  • 모든 선수의 가격은 서로 다르다. 
  • 선수의 이름은 20자 이하여야 하며, 사이에 공백이 있어서는 안 된다.

 

출력

각각의 테스트 케이스에서 가장 비싼 선수의 이름을 출력해야한다.

예제 입력 1

2
3
10 Iversen
1000000 Nannskog
2000000 Rinaldinho
2
1000000 Maradona
999999 Batistuta

예제 출력 1

Ronaldinho
Maradona

더보기

Solution

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

int main(void)
{
	int n;

	scanf("%d", &n);

	for(int test_case=0;test_case<n;test_case++)
	{
		int p, *price=NULL, expensive_index=0;
		char **C=NULL;

		scanf("%d", &p);
		price=(int *)malloc(p*sizeof(int));
		C=(char **)malloc(p*sizeof(char *));
		for(int c=0;c<p;c++)
			C[c]=(char *)calloc(21,sizeof(char));

		for(int i=0;i<p;i++)
		{
			scanf("%d %s", &price[i], C[i]);
			expensive_index=price[i]>price[expensive_index]?i:expensive_index;
		}

		printf("%s\n", C[expensive_index]);

		for(int c=0;c<p;c++)
			free(C[c]);
		free(C);
		free(price);
	}

	return 0;
}
728x90

문제

고창영은 맨날 오타를 낸다. 창영이가 오타를 낸 문장과 오타를 낸 위치가 주어졌을 때, 오타를 지운 문자열을 출력하는 프로그램을 작성하시오.

창영이는 오타를 반드시 1개만 낸다.

입력

첫째 줄에 테스트 케이스의 개수 T(1<=T<=1,000)가 주어진다. 각 테스트 케이스는 한 줄로 구성되어 있다. 첫 숫자는 창영이가 오타를 낸 위치이고, 두 번째 문자열은 창영이가 친 문자열이다. 문자열의 가장 첫 문자는 1번째 문자이고, 문자열의 길이는 80을 넘지 않고, 대문자로만 이루어져 있다. 오타를 낸 위치는 문자열 길이보다 작거나 같다.

출력

각 테스트 케이스에 대해 오타를 지운 문자열을 출력한다.

예제 입력 1

4
4 MISSPELL
1 PROGRAMMING
7 CONTEST
3 BALLOON

예제 출력 1

MISPELL
ROGRAMMING
CONTES
BALOON

더보기

Solution

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

int main(void)
{
	int T;

	scanf("%d", &T);

	for(int t=0;t<T;t++)
	{
		int loc;
		char str[80]={'\0', };

		scanf("%d %s", &loc, str);

		for(int i=0;i<strlen(str);i++)
			if(i+1!=loc)
				printf("%c", str[i]);
		printf("\n");
	}

	return 0;
}
728x90

문제

길이가 같은 두 단어가 주어졌을 때, 각 단어에 포함된 모든 글자의 알파벳 거리를 구하는 프로그램을 작성하시오.

두 글자 x와 y 사이의 알파벳 거리를 구하려면, 먼저 각 알파벳에 숫자를 할당해야 한다. 'A'=1, 'B' = 2, ..., 'Z' = 26. 그 다음 y ≥ x인 경우에는 y-x, y < x인 경우에는 (y+26) - x가 알파벳 거리가 된다.

예를 들어, 'B'와 'D' 사이의 거리는 4 - 2 = 2이고, 'D'와 'B' 사이의 거리는 (2+26) - 4 = 24이다.

입력

첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 두 단어가 공백으로 구분되어져 있다. 단어의 길이는 4보다 크거나 같고, 20보다 작거나 같으며, 알파벳 대문자로만 이루어져 있다.

출력

각 테스트 케이스 마다 각 글자의 알파벳 거리를 공백으로 구분해 출력한다.

예제 입력 1

5
AAAA ABCD
ABCD AAAA
DARK LOKI
STRING THANOS
DEADLY ULTIMO

예제 출력 1

Distances: 0 1 2 3
Distances: 0 25 24 23
Distances: 8 14 19 24
Distances: 1 14 9 25 1 12
Distances: 17 7 19 5 1 16

더보기

Solution

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

int main(void)
{
	int T;

	scanf("%d", &T);

	for(int t=0;t<T;t++)
	{
		char x[21]={'\0', }, y[21]={'\0', };

		scanf("%s %s", x, y);

		printf("Distances: ");
		for(int i=0;i<strlen(x);i++)
			printf("%d ", x[i]>y[i]?y[i]-x[i]+26:y[i]-x[i]);
		printf("\n");
	}

	return 0;
}
728x90

문제

문자열을 입력으로 주면 문자열의 첫 글자와 마지막 글자를 출력하는 프로그램을 작성하시오.

입력

입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으며 문자열의 길이는 1000보다 작다.

출력

각 테스트 케이스에 대해서 주어진 문자열의 첫 글자와 마지막 글자를 연속하여 출력한다.

예제 입력 1

3
ACDKJFOWIEGHE
O
AB

예제 출력 1

AE
OO
AB

더보기

Solution

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

int main(void)
{
	int T;

	scanf("%d", &T);

	for(int t=0;t<T;t++)
	{
		char str[1000]={'\0', };

		scanf("%s", str);

		printf("%c%c\n", str[0], str[strlen(str)-1]);
	}

	return 0;
}
728x90

문제

입력으로 주어지는 문자열에서 연속으로 3개의 문자가 JOI 또는 IOI인 곳이 각각 몇 개 있는지 구하는 프로그램을 작성하시오. 문자열은 알파벳 대문자로만 이루어져 있다. 예를 들어, 아래와 같이 "JOIOIOI"에는 JOI가 1개, IOI가 2개 있다.

입력

첫째 줄에 알파벳 10000자 이내의 문자열이 주어진다. 

출력

첫째 줄에 문자열에 포함되어 있는 JOI의 개수, 둘째 줄에 IOI의 개수를 출력한다.

예제 입력 1

JOIOIOIOI

예제 출력 1

1
3

더보기

Solution

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

int main(void)
{
	int JOI=0, IOI=0;
	char alphabet[10001]={'\0', };

	scanf("%s", alphabet);

	for(int i=0;i<strlen(alphabet)-2;i++)
	{
		JOI+=alphabet[i]=='J'&&alphabet[i+1]=='O'&&alphabet[i+2]=='I';
		IOI+=alphabet[i]=='I'&&alphabet[i+1]=='O'&&alphabet[i+2]=='I';
	}

	printf("%d\n%d\n", JOI, IOI);

	return 0;
}
728x90

문제

재환이는 저스틴 비버 콘서트에서 소리를 너무 많이 질러서 인후염에 걸렸다.

의사는 재환이에게 "aaah"를 말해보라고 시켰다. 안타깝게도 재환이는 의사가 원하는만큼 소리를 길게 낼 수 없는 경우가 있었다.

각각의 의사는 재환이에게 특정한 길이의 "aah"를 말해보라고 요청한다. 어떤 의사는 "aaaaaah"를 요구하기도 하고, "h"만 요구하는 의사도 있다.

모든 의사는 자신이 원하는 길이의 "aah"를 듣지 못하면 진단을 내릴 수 없다.

따라서, 재환이는 집에서 자신이 얼마나 길게 "aah"를 낼 수 있는지 알아냈고, 자기가 소리낼 수 있는 길이의 "aah"를 요구하는 의사를 방문하려고 한다.

재환이가 낼 수 있는 "aah"의 길이와 의사가 요구하는 길이가 주어진다. 이때, 그 병원에 가야하는지 말아야하는지를 알아내는 프로그램을 작성하시오.

입력

입력은 두 줄로 이루어져 있다. 첫째 줄은 재환이가 가장 길게 낼 수 있는 "aaah"이다. 둘째 줄은 의사가 듣기를 원하는 "aah"이다. 두 문자열은 모두 a와 h로만 이루어져 있다. a의 개수는 0보다 크거나 같고, 999보다 작거나 같으며, 항상 h는 마지막에 하나만 주어진다.

출력

재환이가 그 병원에 가야하면 "go"를, 아니면 "no"를 출력한다.

예제 입력 1

aaah
aaaaah

예제 출력 1

no

예제 입력 2

aaah
ah

예제 출력 2

go

더보기

Solution

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

int main(void)
{
	char ah[2][1000]={'\0', };

	for(int i=0;i<2;i++)
		scanf("%s", ah[i]);

	printf("%s\n", strlen(ah[0])>=strlen(ah[1])?"go":"no");

	return 0;
}
728x90

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 모음(a, e, i, o, u)의 개수를 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 모음의 개수를 출력한다.

예제 입력 1

baekjoon

예제 출력 1

4

더보기

Solution

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

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

	scanf("%s", word);

	for(int i=0;i<strlen(word);i++)
		vowel+=word[i]=='a'||word[i]=='e'||word[i]=='i'||word[i]=='o'||word[i]=='u';

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

	return 0;
}
728x90

문제

ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.

예를 들어, "Baekjoon Online Judge"를 ROT13으로 암호화하면 "Onrxwbba Bayvar Whqtr"가 된다. ROT13으로 암호화한 내용을 원래 내용으로 바꾸려면 암호화한 문자열을 다시 ROT13하면 된다. 앞에서 암호화한 문자열 "Onrxwbba Bayvar Whqtr"에 다시 ROT13을 적용하면 "Baekjoon Online Judge"가 된다.

ROT13은 알파벳 대문자와 소문자에만 적용할 수 있다. 알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다. 예를 들어, "One is 1"을 ROT13으로 암호화하면 "Bar vf 1"이 된다.

문자열이 주어졌을 때, "ROT13"으로 암호화한 다음 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

출력

첫째 줄에 S를 ROT13으로 암호화한 내용을 출력한다.

예제 입력 1

Baekjoon Online Judge

예제 출력 1

Onrxbba Bayvar Whqtr

예제 입력 2

One is 1

예제 출력 2

Bar vf 1

더보기

Solution

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

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

	fgets(S,sizeof(S),stdin);

	for(int i=0;i<strlen(S);i++)
		if(isalpha(S[i]))
			S[i]+=isupper(S[i])&&S[i]<'N' || islower(S[i])&&S[i]<'n'?13:-13;

	printf("%s", S);

	return 0;
}
728x90

+ Recent posts