[Baekjoon] Class1 21~25
음계 [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);
}