https://www.acmicpc.net/problem/1159
코드
#include <stdio.h>
int main()
{
int n, countNum = 0;
scanf("%d", &n);
char name[151][31];
char first[151];
int count[26] = {0};
for (int i = 0; i < n; i++)
{
scanf("%s", name[i]);
first[i] = name[i][0];
}
for (int i = 0; i < n; i++)
{
count[first[i] - 'a']++;
if (count[first[i] - 'a'] == 5) countNum++;
}
if (countNum == 0) printf("PREDAJA");
else for (int i = 0; i < 26; i++) if (count[i] >= 5) printf("%c", 'a' + i);
return 0;
}
코드 설명
반복문을 돌면서 선수의 이름 성을 입력받고 first배열에 성의 첫 번째 문자를 first 배열에 저장한다.
이후 다시 반복문을 돌면서 성의 첫 번째 문자가 몇 번 나오는지를 count배열에 저장한다. 만약 다섯 번 나온 성이 있다면 countNumber에 1을 더한다.
만약 conutNumber가 0이라면 선수 다섯 명을 선발할 수 없는 경우이기 때문에 PREDAJA를 출력한다.
그렇지 않은 경우에는 count배열에 저장된 값이 5 이상인 인덱스에 a를 더해서 문자로 출력한다.
느낀 점
아스키코드의 연속을 이용해서 푸는 문제이다. 처음에는 어떻게 해야 할지 몰랐는데, 아스키코드의 연속을 이용할 수 있음을 생각해낸 후에는 금방 풀었다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C] 1085 직사각형에서 탈출 (0) | 2022.08.22 |
---|---|
[백준/C] 1598 꼬리를 무는 숫자 나열 (0) | 2022.08.22 |
[백준/C] 1032 명령 프롬프트 (0) | 2022.08.20 |
[백준/C] 1010 다리놓기 (0) | 2022.08.20 |
[백준/C] 1924 2007년 (0) | 2022.08.20 |