[백준 BOJ] 26004번 HI-ARC (C++/cpp)

2023. 4. 2. 23:25PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/26004

 

26004번: HI-ARC

첫째 줄에 문자열 $S$의 길이 정수 $N$이 주어진다. ($1 \leq N \leq 100\,000$) 둘째 줄에 문자열 $S$가 주어진다. 문자열 $S$의 모든 문자는 영어 대문자이다.

www.acmicpc.net

백준 BOJ 26004번 HI-ARC 문제 사진1
백준 BOJ 26004번 HI-ARC 문제 사진2

 

접근 방법 - 문자열에 대한 기초적인 연산 문제

백준의 26004번 문제는 문자열 및 문자형 타입의 정보에 대한 기초적인 연산 문제이다.

해당 문제는, 주어진 문자열을 이용하여 HI-ARC을 몇 개 만들 수 있는지에 대해 구하여 출력해야 하는 문제이다.

여기서, 5개의 문자를 하나씩 사용하여 "HI-ARC"를 만들 수 있다는 조건을 이용해야 한다.

따라서, 주어진 문자열에 5개의 문자가 각각 몇 개 있는지를 파악한 뒤 이들 중 가장 적게 있는 문자의 정보를 정답으로 출력하면 된다.

문자열에 대한 연산 문제를 어느 정도 풀어본 사람이라면 비교적 쉽게 해결할 수 있었을 것으로 예상된다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해 보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 5개 문자의 개수 정보를 각각 저장할 배열(cnt)을 전역 변수로 미리 선언해 둔다.

 

2) 문자열의 길이(n)와 문자열(st)을 각각 입력받는다.

 

3) st의 길이만큼 반복문을 실행하고, switch문을 이용하여 5개 문자의 개수를 각각 카운팅 하도록 한다.

(필자의 경우에는 'H', 'I', 'A', 'R', 'C' 순으로 개수의 값을 cnt에 저장하게끔 하였다.)

 

4) 5개 문자의 개수들 중 최소의 값을 구하기 위해, 변수 min을 임의의 큰 수로 설정하여 선언해 둔다.

(작은 값을 발견하는 대로 값을 갱신해야 하기 때문에, 우선은 임의의 큰 수로 설정하여 값이 변경되게끔 해야 한다.)

 

5) cnt의 각 값을 탐색하며, min의 값보다 작은 값을 발견할 때마다 그 즉시 min 값을 변경하도록 한다.

 

6) 위의 연산을 모두 완료하였다면, 최종적으로 저장된 min 값을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;

//백준 26004번 코드
int cnt[5];
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	string st;
	cin >> n >> st;

	for (int i = 0; i < st.length(); i++) {
		switch (st[i]) {
		case 'H':	cnt[0]++;	break;
		case 'I':	cnt[1]++;	break;
		case 'A':	cnt[2]++;	break;
		case 'R':	cnt[3]++;	break;
		case 'C':	cnt[4]++;	break;
		}
	}

	int min = 100000;
	for (int i = 0; i < 5; i++) {
		if (cnt[i] < min) {
			min = cnt[i];
		}
	}

	cout << min << endl;
}

 

제출 결과

백준 BOJ 26004번 HI-ARC 문제 C++ 제출 결과

(2022.11.20 백준 26004번 문제 제출 결과)

반응형