문제
당신은 𝐇𝐈-𝐀𝐑𝐂의 열렬한 팬이다. 따라서 위의 이모지를 만들고 싶어 한다.
현재 길이의 문자열 를 가지고 있다. 이모지를 하나 만들기 위해선 𝐇 𝐈 𝐀 𝐑 𝐂 각 문자가 하나씩 필요하다. 이모지를 최대 몇 개 만들 수 있는지 구해보자.
입력
첫째 줄에 문자열 의 길이 정수 이 주어진다. (1 ≤ N ≤ 100 000)
둘째 줄에 문자열 가 주어진다. 문자열 의 모든 문자는 영어 대문자이다.
출력
첫째 줄에 주어진 문자열 로 만들 수 있는 이모지의 최대 개수를 출력한다.
풀이 과정
H, I, A, R, C 하나씩 사용하여 HI-ARC 이모지를 만들 수 있으므로, 다른 글자가 아무리 많다 한들 각 글자 중에서 최소 개수를 가진 특정 글자의 개수 만큼만 HI-ARC 이모지를 만들 수 있다.
따라서, H, I, A, R, C가 나온 횟수를 저장한 뒤 이 중 최솟값을 출력한다.
C
#include <stdio.h>
char s[100000];
int main(void) {
int n; scanf("%d", &n);
scanf("%s", s);
int arr[26] = {0,}; // 알파벳 등장 횟수를 저장
for (int i = 0; i < n; i++)
arr[s[i] - 'A'] += 1;
int min = arr[0]; // A
if (min > arr['H' - 'A']) min = arr['H' - 'A']; // H
if (min > arr['I' - 'A']) min = arr['I' - 'A']; // I
if (min > arr['R' - 'A']) min = arr['R' - 'A']; // R
if (min > arr['C' - 'A']) min = arr['C' - 'A']; // C
printf("%d", min);
return 0;
}
먼저, 각 알파벳이 등장하는 횟수를 저장하는 arr 배열을 만들었다.
arr[한 문자 - 'A'] += 1; 명령을 이용해, 'A' 글자 등장 횟수는 0 번째, 'B' 글자 등장 횟수는 1 번째, 'C' 글자 등장 횟수는 2번째... 에 저장하도록 하였다.
(+) 'C' - 'A' 를 하면 아스키 연산으로 2가 나온다. ( 67 - 65 = 2 ) 이러한 문자끼리 수행하는 뺄셈 연산을 사용하면 26 크기의 배열에 알파벳 순으로 정보를 저장할 수 있다.
H, I, A, R, C 문자 등장 횟수 중 최솟값을 찾으면 그 값이 만들 수 있는 HI-ARC 이모지의 최댓값이 된다.
Python
import sys
input = sys.stdin.readline
n = int(input().rstrip())
string = input().rstrip()
print(min(string.count('H'), string.count('I'), string.count('A'), string.count('R'), string.count('C')))
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 20053 : 최소, 최대 2 ( BRONZE 3 ) / C, Python (0) | 2023.10.07 |
---|---|
[ BOJ ] 2576 : 홀수 ( BRONZE 3 ) / C, Python (0) | 2023.10.07 |
[ BOJ ] 4504 : 배수 찾기 ( BRONZE 3 ) / C, Python (0) | 2023.10.06 |
[ BOJ ] 21964 : 선린인터넷고등학교 교가 ( BRONZE 3 ) / C, Python (0) | 2023.10.05 |
[ BOJ ] 2662 : 기업투자 ( GOLD 2 ) / Python (0) | 2023.10.03 |