[백준 BOJ] 2857번 FBI (C++/cpp)

2022. 11. 22. 16:10PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2857번: FBI

5개 줄에 요원의 첩보원명이 주어진다. 첩보원명은 알파벳 대문자, 숫자 0~9, 대시 (-)로만 이루어져 있으며, 최대 10글자이다.

www.acmicpc.net

백준 BOJ 2857번 FBI 문제 사진1
백준 BOJ 2857번 FBI 문제 사진2

 

접근 방법 - 문자열 연산의 응용문제

백준의 2857번 문제는 문자열 연산에 있어 다소 심화적인 부분을 다루고 있는 문제이다.

해당 문제는, 입력받은 5명의 이름들 중 FBI 요원의 각 인덱스를 구하여 출력해야 하는 문제이다.

FBI 요원의 이름에 "FBI"라는 단어가 포함되어있다는 조건을 감안하면, 각 입력값에 이를 포함하는지를 확인하며 답을 구하면 될 것이다.

필자와 같은 경우에는 find() 함수를 주로 이용하여 이 문제를 해결해보았다.

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

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

 

코드의 실행 순서

1) FBI 요원의 각 인덱스를 저장할 배열(result)을 미리 전역 변수로 선언해둔다.

 

2) FBI 요원의 수를 저장할 변수 sum을 0으로 초기화하여 선언한다.

(이 변수는 result의 인덱스로 사용될 예정이다.)

 

3) 반복문을 수행하여, 아래의 연산을 취한다.

- 이름(st)을 하나씩 입력받는다.

- st에 "FBI"라는 단어가 있는지 확인한다. 만일 있다면, result에 해당 인덱스를 저장하고 sum에도 1을 더한다.

(여기서, 입력값에서 인덱스 시작은 1이기 때문에, 원래 인덱스 번호에 1을 추가한 채로 result에 저장하도록 한다.)

 

4) sum의 값에 따라, 아래와 같은 출력을 수행한다.

- 만일 sum 값이 0이라면, 여기엔 FBI 요원이 없음을 뜻한다. 따라서 이 경우엔, "HE GOT AWAY!"를 출력한다.

- sum 값이 0이 아니라면, FBI 요원이 존재한다는 것을 뜻한다. 이 경우엔, result에 저장된 번호들을 순차적으로 출력한다.

 

5) 출력이 완료되었다면, 실행 종료한다.

반응형

 

성공한 코드

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

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

	int sum = 0;
	for (int i = 0; i < 5; i++) {
		string st;
		cin >> st;
		if (st.find("FBI") != std::string::npos) {
			result[sum] = i + 1;
			sum++;
		}
	}

	if (sum == 0) {
		cout << "HE GOT AWAY!" << endl;
	}
	else {
		for (int i = 0; i < sum; i++) {
			cout << result[i] << " ";
		}
		cout << endl;
	}
}

 

제출 결과

백준 BOJ 2857번 FBI 문제 C++ 제출 결과

(2022.10.23 백준 2857번 문제 제출 결과)

반응형