-- 예전 기록/BOJ

[ BOJ ] 26004 : HI-ARC ( BRONZE 3 ) / C, Python

rejo 2023. 10. 6. 13:33

문제

당신은 𝐇𝐈-𝐀𝐑𝐂의 열렬한 팬이다. 따라서 위의 이모지를 만들고 싶어 한다.

현재  길이의 문자열 를 가지고 있다. 이모지를 하나 만들기 위해선 𝐇 𝐈 𝐀 𝐑 𝐂 각 문자가 하나씩 필요하다. 이모지를 최대 몇 개 만들 수 있는지 구해보자.

입력

첫째 줄에 문자열 의 길이 정수 이 주어진다. (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')))