인기 티비 프로그램 "나는 요리사 인가?"의 새 시즌이 시작한다. 이번 시즌은 기네스북에 등재될 만한 음식을 만드는 것을 목표로 진행한다.

첫 번째 에피소드에 출연하는 요리사는 전설의 요리사 김상근이고, 길이 L미터의 롤 케이크를 만들 것이다.

상근은 몇 시간동안 집중해서 케이크를 만들었고, 이제 스튜디오의 방청객 N명에게 케이크를 나누어 주려고 한다.

상근이는 롤 케이크를 펼쳐서 1미터 단위로 잘라 놓았다. 가장 왼쪽 조각이 1번, 오른쪽 조각이 L번 조각이다. 방청객은 1번부터 N번까지 번호가 매겨져 있다. 각 방청객은 종이에 자신이 원하는 조각을 적어서 낸다. 이때, 두 수 P와 K를 적어서 내며, P번 조각부터 K번 조각을 원한다는 뜻이다.

프로그램의 진행자 고창영은 1번 방청객의 종이부터 순서대로 펼쳐서 해당하는 조각에 그 사람의 번호를 적을 것이다. 이때, 이미 번호가 적혀있는 조각은 번호를 적지 못하고 넘어간다. 이런 방식을 이용해서 방청객에게 조각을 주다보니, 자신이 원래 원했던 조각을 받지 못하는 경우가 생길 수 있다.

아래 그림은 이 문제의 예제를 나타낸 것이다.

가장 많은 케이크 조각을 받을 것으로 기대한 방청객의 번호와 실제로 가장 많은 케이크 조각을 받는 방청객의 번호를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 롤 케이크의 길이 L (1 ≤ L ≤ 1000)이 주어진다. 둘째 줄에는 방청객의 수 N (1 ≤ N ≤ 1000)이 주어진다. 다음 N개 줄에는 각 방청객 i가 종이에 적어낸 수 P(i)와 K(i)가 주어진다. (1 ≤ P(i) ≤ K(i) ≤ L, i = 1..N)

출력

첫째 줄에 가장 많은 조각을 받을 것으로 기대하고 있던 방청객의 번호를 출력한다.

둘째 줄에 실제로 가장 많은 조각을 받은 방청객의 번호를 출력한다.

가장 많은 조각을 받도록 예상되는 방청객이 여러 명인 경우에는 번호가 작은 사람을 출력한다.

예제 입력 1

10
3
2 4
7 8
6 9

예제 출력 1

3
1

예제 입력 2

10
3
1 3
5 7
8 9

예제 출력 2

1
1

예제 입력 3

10
5
1 1
1 2
1 3
1 4
7 8

예제 출력 3

4
5

더보기

Solution

#include<stdio.h>

int main(void)
{
	int L, N, P, K, longest=0, longest_index, *cake=NULL, *actual=NULL, max_index=0;

	scanf("%d", &L);
	cake=(int *)calloc(L+1,sizeof(int));
	scanf("%d", &N);
	actual=(int *)calloc(N+1,sizeof(int));

	for(int n=1;n<=N;n++)
	{
		scanf("%d%d", &P, &K);
		for(int i=P;i<=K;i++)
			if(!cake[i])
			{
				cake[i]=n;
				actual[n]++;
			}
		if(K-P+1>longest)
		{
			longest=K-P+1;
			longest_index=n;
		}
		if(actual[n]>actual[max_index])
			max_index=n;
	}

	printf("%d\n%d\n", longest_index, max_index);
	free(actual);
	free(cake);
	return 0;
}
728x90

시골에 있는 태양이의 삼촌 댁에는 커다란 참외밭이 있다. 문득 태양이는 이 밭에서 자라는 참외가 도대체 몇 개나 되는지 궁금해졌다. 어떻게 알아낼 수 있는지 골똘히 생각하다가 드디어 좋은 아이디어가 떠올랐다. 유레카! 1m^2의 넓이에 자라는 참외 개수를 헤아린 다음, 참외밭의 넓이를 구하면 비례식을 이용하여 참외의 총개수를 구할 수 있다.

1m^2의 넓이에 자라는 참외의 개수는 헤아렸고, 이제 참외밭의 넓이만 구하면 된다. 참외밭은 ㄱ-자 모양이거나 ㄱ-자를 90도, 180도, 270도 회전한 모양(┏, ┗, ┛ 모양)의 육각형이다. 다행히도 밭의 경계(육각형의 변)는 모두 동서 방향이거나 남북 방향이었다. 밭의 한 모퉁이에서 출발하여 밭의 둘레를 돌면서 밭경계 길이를 모두 측정하였다.

예를 들어 참외밭이 위 그림과 같은 모양이라고 하자. 그림에서 오른쪽은 동쪽, 왼쪽은 서쪽, 아래쪽은 남쪽, 위쪽은 북쪽이다. 이 그림의 왼쪽위 꼭짓점에서 출발하여, 반시계방향으로 남쪽으로 30m, 동쪽으로 60m, 남쪽으로 20m, 동쪽으로 100m, 북쪽으로 50m, 서쪽으로 160m 이동하면 다시 출발점으로 되돌아가게 된다.

위 그림의 참외밭  면적은 6800m^2이다. 만약 1m^2의 넓이에 자라는 참외의 개수가 7이라면, 이 밭에서 자라는 참외의 개수는 47600으로 계산된다.

1m2의 넓이에 자라는 참외의 개수와, 참외밭을 이루는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이가 순서대로 주어진다. 이 참외밭에서 자라는 참외의 수를 구하는 프로그램을 작성하시오.

입력

첫 번째 줄에 1m^2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이 (1 이상 500 이하의 정수) 가 둘째 줄부터 일곱 번째 줄까지 한 줄에 하나씩 순서대로 주어진다. 변의 방향에서 동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4로 나타낸다.

출력

첫째 줄에 입력으로 주어진 밭에서 자라는 참외의 수를 출력한다.

예제 입력 1

7
4 50
2 160
3 30
1 60
3 20
1 100

예제 출력 1

47600

더보기

Solution

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

int main(void)
{
	int K, location[6][2]={{0,0}, }, right=-500, left=500, up=-500, down=500, another[2], area=0;
	bool check[4]={false, };

	scanf("%d", &K);
	for(int i=0;i<5;i++)
	{
		int direction, distance;

		scanf("%d%d", &direction, &distance);

		if(direction==1)
		{
			location[i+1][0]=location[i][0]+distance;
			location[i+1][1]=location[i][1];
		}
		else if(direction==2)
		{
			location[i+1][0]=location[i][0]-distance;
			location[i+1][1]=location[i][1];
		}
		else if(direction==3)
		{
			location[i+1][0]=location[i][0];
			location[i+1][1]=location[i][1]-distance;
		}
		else
		{
			location[i+1][0]=location[i][0];
			location[i+1][1]=location[i][1]+distance;
		}
	}

	for(int i=0;i<6;i++)
	{
		if(location[i][0]<left)
			left=location[i][0];
		if(location[i][0]>right)
			right=location[i][0];
		if(location[i][1]<down)
			down=location[i][1];
		if(location[i][1]>up)
			up=location[i][1];
	}

	area=(up-down)*(right-left);

	for(int i=0;i<6;i++)
		if(location[i][0]==left && location[i][1]==down)
			check[0]=true;
		else if(location[i][0]==right && location[i][1]==down)
			check[1]=true;
		else if(location[i][0]==right && location[i][1]==up)
			check[2]=true;
		else if(location[i][0]==left && location[i][1]==up)
			check[3]=true;
		else if(location[i][0]!=left && location[i][0]!=right && location[i][1]!=down && location[i][1]!=up)
		{
			another[0]=location[i][0];
			another[1]=location[i][1];
		}

	if(!check[0])
		area-=(another[0]-left)*(another[1]-down);
	else if(!check[1])
		area-=(right-another[0])*(another[1]-down);
	else if(!check[2])
		area-=(right-another[0])*(up-another[1]);
	else
		area-=(another[0]-left)*(up-another[1]);

	printf("%d\n", K*area);
	return 0;
}
728x90

1부터 연속적으로 번호가 붙어있는 스위치들이 있다. 스위치는 켜져 있거나 꺼져있는 상태이다. <그림 1>에 스위치 8개의 상태가 표시되어 있다. ‘1’은 스위치가 켜져 있음을, ‘0’은 꺼져 있음을 나타낸다. 그리고 학생 몇 명을 뽑아서, 학생들에게 1 이상이고 스위치 개수 이하인 자연수를 하나씩 나누어주었다. 학생들은 자신의 성별과 받은 수에 따라 아래와 같은 방식으로 스위치를 조작하게 된다.

남학생은 스위치 번호가 자기가 받은 수의 배수이면, 그 스위치의 상태를 바꾼다. 즉, 스위치가 켜져 있으면 끄고, 꺼져 있으면 켠다. <그림 1>과 같은 상태에서 남학생이 3을 받았다면, 이 학생은 <그림 2>와 같이 3번, 6번 스위치의 상태를 바꾼다.

여학생은 자기가 받은 수와 같은 번호가 붙은 스위치를 중심으로 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아서, 그 구간에 속한 스위치의 상태를 모두 바꾼다. 이때 구간에 속한 스위치 개수는 항상 홀수가 된다.

스위치 번호
스위치 상태 0 1 0 1 0 0 0 1

<그림 1>

예를 들어 <그림 2>에서 여학생이 3을 받았다면, 3번 스위치를 중심으로 2번, 4번 스위치의 상태가 같고 1번, 5번 스위치의 상태가 같으므로, <그림 3>과 같이 1번부터 5번까지 스위치의 상태를 모두 바꾼다. 만약 <그림 2>에서 여학생이 4를 받았다면, 3번, 5번 스위치의 상태가 서로 다르므로 4번 스위치의 상태만 바꾼다.

스위치 번호
스위치 상태 0 1 1 1 0 1 0 1

<그림 2>

스위치 번호
스위치 상태 1 0 0 0 1 1 0 1

<그림 3>

입력으로 스위치들의 처음 상태가 주어지고, 각 학생의 성별과 받은 수가 주어진다. 학생들은 입력되는 순서대로 자기의 성별과 받은 수에 따라 스위치의 상태를 바꾸었을 때, 스위치들의 마지막 상태를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 있다. 셋째 줄에는 학생수가 주어진다. 학생수는 100 이하인 양의 정수이다. 넷째 줄부터 마지막 줄까지 한 줄에 한 학생의 성별, 학생이 받은 수가 주어진다. 남학생은 1로, 여학생은 2로 표시하고, 학생이 받은 수는 스위치 개수 이하인 양의 정수이다. 학생의 성별과 받은 수 사이에 빈칸이 하나씩 있다.

출력

스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 예를 들어 21번 스위치가 있다면 이 스위치의 상태는 둘째 줄 맨 앞에 출력한다. 켜진 스위치는 1, 꺼진 스위치는 0으로 표시하고, 스위치 상태 사이에 빈칸을 하나씩 둔다.

예제 입력 1

8
0 1 0 1 0 0 0 1
2
1 3
2 3

예제 출력 1

1 0 0 0 1 1 0 1

더보기

Solution

#include<stdio.h>

int main(void)
{
	int N, M, *_switch=NULL, *gender=NULL, *number=NULL;

	scanf("%d", &N);
	_switch=(int *)malloc(N*sizeof(int));
	for(int n=0;n<N;n++)
		scanf("%d", &_switch[n]);

	scanf("%d", &M);
	gender=(int *)malloc(M*sizeof(int));
	number=(int *)malloc(M*sizeof(int));
	for(int m=0;m<M;m++)
		scanf("%d%d", &gender[m], &number[m]);

	for(int m=0;m<M;m++)
	{
		if(gender[m]==1)
		{
			for(int n=0;n<N;n++)
				if((n+1)%number[m]==0)
					_switch[n]++;
		}
		else
		{
			int count=0;

			while(number[m]+count<=N && number[m]-count>0)
			{
				if(_switch[number[m]-1+count]%2!=_switch[number[m]-1-count]%2)
					break;
				else
					count++;
			}

			count--;
			for(int i=number[m]-1-count;i<=number[m]-1+count;i++)
				_switch[i]++;
		}
	}

	for(int n=0;n<N;n++)
		printf("%d%c", _switch[n]%2, n%20==19?'\n':' ');
	free(number);
	free(gender);
	free(_switch);
	return 0;
}
더보기

Solution

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb=new StringBuilder();
		StringTokenizer st;
		int N=Integer.parseInt(br.readLine());
		int[] _switch=new int[N];
		
		st=new StringTokenizer(br.readLine());
		for(int n=0;n<N;n++)
			_switch[n]=Integer.parseInt(st.nextToken());
		
		int M=Integer.parseInt(br.readLine());
		int[] gender=new int[M];
		int[] number=new int[M];
		
		for(int m=0;m<M;m++) {
			st=new StringTokenizer(br.readLine());
			gender[m]=Integer.parseInt(st.nextToken());
			number[m]=Integer.parseInt(st.nextToken());
		}
		
		for(int m=0;m<M;m++)
			if(gender[m]==1) {
				for(int n=0;n<N;n++)
					if((n+1)%number[m]==0)
						_switch[n]++;
			}
			else {
				int count=0;
				
				while(number[m]+count<=N && number[m]-count>0)
					if(_switch[number[m]-1+count]%2!=_switch[number[m]-1-count]%2)
						break;
					else
						count++;
				
				count--;
				for(int i=number[m]-1-count;i<=number[m]-1+count;i++)
					_switch[i]++;
			}
		
		for(int n=0;n<N;n++)
			sb.append(_switch[n]%2+(n%20==19?"\n":" "));
		System.out.println(sb.toString());
	}
}

 

728x90

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다.

매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대학교가 자신과 맞는가에 대한 고민을 항상 해왔다.

중앙대학교와 자신의 길이 맞지 않다고 생각한 JH 교수님은 결국 중앙대학교를 떠나기로 결정하였다.

떠나기 전까지도 제자들을 생각하셨던 JH 교수님은 재귀함수가 무엇인지 물어보는 학생들을 위한 작은 선물로 자동 응답 챗봇을 준비하기로 했다.

JH 교수님이 만들 챗봇의 응답을 출력하는 프로그램을 만들어보자.

입력

교수님이 출력을 원하는 재귀 횟수 N(1 ≤ N ≤ 50)이 주어진다.

출력

출력 예시를 보고 재귀 횟수에 따른 챗봇의 응답을 출력한다.

예제 입력 1

2

예제 출력 1

어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____"재귀함수가 뭔가요?"
____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________"재귀함수가 뭔가요?"
________"재귀함수는 자기 자신을 호출하는 함수라네"
________라고 답변하였지.
____라고 답변하였지.
라고 답변하였지.

예제 입력 2

4

예제 출력 2

어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____"재귀함수가 뭔가요?"
____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________"재귀함수가 뭔가요?"
________"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
________마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
________그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____________"재귀함수가 뭔가요?"
____________"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____________마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____________그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________________"재귀함수가 뭔가요?"
________________"재귀함수는 자기 자신을 호출하는 함수라네"
________________라고 답변하였지.
____________라고 답변하였지.
________라고 답변하였지.
____라고 답변하였지.
라고 답변하였지.

더보기

Solution

#include<stdio.h>

void recursion(int n,int N)
{
	if(n>N)
		return;

	for(int i=0;i<n;i++)
		printf("____");
	printf("\"재귀함수가 뭔가요?\"\n");

	if(n==N)
	{
		for(int i=0;i<n;i++)
			printf("____");
		printf("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
	}

	else
	{
		for(int i=0;i<n;i++)
			printf("____");
		printf("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
		for(int i=0;i<n;i++)
			printf("____");
		printf("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
		for(int i=0;i<n;i++)
			printf("____");
		printf("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
	}

	recursion(n+1,N);

	for(int i=0;i<n;i++)
		printf("____");
	printf("라고 답변하였지.\n");	
}

int main(void)
{
	int N;

	scanf("%d", &N);

	printf("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
	recursion(0,N);

	return 0;
}
728x90

아래 예제와 같이 새싹을 출력하시오.

입력

입력은 없다.

출력

새싹을 출력한다.

예제 입력 1

 

예제 출력 1

         ,r'"7
r`-_   ,'  ,/
 \. ". L_r'
   `~\/
      |
      |

더보기

Solution

#include<stdio.h>

int main(void)
{
	printf("         ,r'\"7\n");
	printf("r`-_   ,'  ,/\n");
	printf(" \\. \". L_r'\n");
	printf("   `~\\/\n");
	printf("      |\n");
	printf("      |\n");

	return 0;
}
728x90

D2는 For Developers, By Developers의 약자로, 개발자들을 위해 개발자들이 직접 만들어 가고 있는 네이버 개발자 지원 프로그램입니다. 네이버가 축적한 기술과 지식을 공유하고, 외부 개발자들을 지원해 대한민국 개발자 역량 강화를 이끌고, 이를 통해 업계 전체와 네이버가 함께 성장하는 선순환 구조를 만들고자 합니다.

사실 네이버의 개발자 지원은 오랜 기간 꾸준히 이어져 왔습니다. 개발자 컨퍼런스 DEVIEW를 비롯, 오픈 소스와 개발 도구 공개, 학회 및 커뮤니티 지원 등 여러 지원 프로그램이 있었습니다. 이런 다양한 프로그램을 하나로 통합한 것이 바로 Naver D2입니다.

D2 CAMPUS 프로그램은 다른 학생 개발자에게 개발 지식을 공유할 수 있도록 실력 있는 SW 동아리, 소모임, 학회, 세미나, 컨퍼런스를 지원합니다.

숭고한 알고리즘 대회를 운영하게 된 성서는 참가자들에게 상금을 주기 위해 여러 기업에 후원 요청을 보냈고, D2 CAMPUS를 통해 대회 상금을 지원받게 되었다.

상금을 사비로 부담하지 않아도 돼서 감사한 성서는 검색창에 N 또는 n이 입력되면 Naver D2가 자동 완성되도록 설정하고 싶다. 알파벳 하나를 입력받아서 그 알파벳이 N 또는 n이면 Naver D2를 출력하고, 아니라면 Naver Whale을 출력하는 프로그램을 작성해보자.

입력

첫 줄에 알파벳 하나가 주어진다.

출력

주어진 알파벳이 N 또는 n 이면 "Naver D2", 아니라면 "Naver Whale"을 따옴표를 제외하고 출력한다.

예제 입력 1

N

예제 출력 1

Naver D2

예제 입력 2

n

예제 출력 2

Naver D2

예제 입력 3

A

예제 출력 3

Naver Whale

예제 입력 4

g

예제 출력 4

Naver Whale

더보기

Solution

#include<stdio.h>

int main(void)
{
	char c;

	scanf("%c", &c);

	printf("%s\n", c=='n'||c=='N'?"Naver D2":"Naver Whale");
	return 0;
}
728x90

조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.

이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.

조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.

한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고, r1, r2는 10,000보다 작거나 같은 자연수이다.

출력

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

예제 입력 1

3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5

예제 출력 1

2
1
0

더보기

Solution

#include<stdio.h>
int main(void)
{
	int T;

	scanf("%d", &T);

	for(int t=0;t<T;t++)
	{
		int x1, y1, r1, x2, y2, r2, d;
		scanf("%d%d%d%d%d%d", &x1, &y1, &r1, &x2, &y2, &r2);

		d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);

		if((r1+r2)*(r1+r2)<d)			//멀어서 만나지 않는 경우
			printf("0\n");
		else if(d==0 && r1==r2)			//일치하는 경우
			printf("-1\n");
		else if((r1+r2)*(r1+r2)==d)			//외접하는 경우
			printf("1\n");
		else if(d==0 && r1!=r2)			//중심이 같고 반지름이 달라 만나지 않는 경우
			printf("0\n");
		else if((r1-r2)*(r1-r2)==d)			//내접하는 경우
			printf("1\n");
		else if((r1-r2)*(r1-r2)<d && d<(r1+r2)*(r1+r2))	//두 점에서 만나는 경우
			printf("2\n");
		else
			printf("0\n");
	}

	return 0;
}
728x90

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

입력

 

첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

출력

첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.

예제 입력 1

joonas

예제 출력 1

joonas??!

더보기

Solution

#include<stdio.h>

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

	scanf("%s", id);

	printf("%s??!", id);
	return 0;
}
728x90

+ Recent posts