음계 [2920번]

다장조는 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 중 하나를 출력한다.

생각해볼점

딱히 없다.

코드 구현

#include <stdio.h>

int main()
{
	int	scale[8], idx = 0, count = 0;

	while (idx < 8)
		scanf("%d", &scale[idx++]);
	
	idx = 0;
	while (++idx < 8)
	{
		if (scale[idx] > scale[idx - 1])
			count++;
		else
			count--;
	}

	if (count == 7)
		printf("ascending");
	else if (count == -7)
		printf("descending");
	else
		printf("mixed");
	return (0);
}

나머지 [3052번]

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력

첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

출력

첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

생각해볼점

딱히 없다.

코드 구현

#include <stdio.h>

int main()
{
	int	num[10], remainder[42] = {0, }, idx = 0, count = 0;

	while (idx < 10)
		scanf("%d", &num[idx++]);
	
	idx = 0;
	while (idx < 10)
		remainder[num[idx++] % 42]++;
	
	idx = 0;
	while (idx < 42)
	{
		if (remainder[idx++])
			count++;
	}
	
	printf("%d", count);
	return (0);
}

OX퀴즈 [8958번]

“OOXXOXXOOO”와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
“OOXXOXXOOO”의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

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

출력

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

생각해볼점

딱히 없다.

코드 구현

#include <stdio.h>

int main()
{
	int	num, ox[80], idx, score, count;

	scanf("%d", &num);
	
	while (num-- > 0)
	{
		scanf("%s", ox);
		idx = 0;
		score = 0;
		count = 1;
		while (ox[idx])
		{
			if (ox[idx++] == 'O')
				score += count++;
			else
				count = 1;
		}
		printf("%d\n", score);
	}
	
	return (0);
}

시험 성적 [9498번]

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력

시험 성적을 출력한다.

생각해볼점

if/else if 구문을 쓰면 아무 문제 없이 해결할 수 있는 문제지만, 답안 제출 후 다른 사람들의 답들을 구경하다가 아래와 같이 하면 단 한줄로 해결할 수도 있다는걸 깨달았다.

printf("%c", "FFFFFFDCBAA"[score/10])

세상에는 똑똑한 사람들이 참 많다…

코드 구현

#include <stdio.h>

int main()
{
	int	score;

	scanf("%d", &score);
	
	if (score >= 90)
		printf("A");
	else if (score >= 80)
		printf("B");
	else if (score >= 70)
		printf("C");
	else if (score >= 60)
		printf("D");
	else
		printf("F");
	

	return (0);
}

고양이 [10171번]

아래 예제와 같이 고양이를 출력하시오.

\    /\
 )  ( ')
(  /  )
 \(__)|

입력

없음.

출력

고양이를 출력한다.

생각해볼점

\\을 입력해야 \를 표기할 수 있다.

코드 구현

#include <stdio.h>

int main()
{
	printf("\\    /\\\n )  ( ')\n(  /  )\n \\(__)|\n");
	return (0);
}