메이쁘

(JAVA) 백준 2857번 : FBI (Feat. 정규표현식 정리 표) 본문

Algorithm/Baekjoon

(JAVA) 백준 2857번 : FBI (Feat. 정규표현식 정리 표)

메이쁘 2020. 2. 29. 04:22

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

 

2857번: FBI

문제 5명의 요원 중 FBI 요원을 찾는 프로그램을 작성하시오. FBI요원은 요원의 첩보원명에 FBI가 들어있다.  입력 5개 줄에 요원의 첩보원명이 주어진다. 첩보원명은 알파벳 대문자, 숫자 0~9, 대시 (-)로만 이루어져 있으며, 최대 10글자이다. 출력 첫째 줄에 FBI 요원을 출력한다. 이때, 해당하는 요원이 몇 번째 입력인지를 공백으로 구분하여 출력해야 하며, 오름차순으로 출력해야 한다. 만약 FBI 요원이 없다면 "HE GOT AWAY!"를

www.acmicpc.net

 

엄청 쉬운 문제.

 

String 함수 중 contains를 사용하면 끝이지만

연습 겸 자바 정규표현식을 이용했다.

 

find를 사용하기 위해서는 Pattern 객체를 생성해서 정규표현식을 compile 한 뒤

Matcher 객체를 생성해서 이전에 생성한 Pattern 객체와 문자열 String을 매치시킨다.

마지막으로 매치시킨 Match 객체를 가지고 원하는 함수를 사용해서 결과를 얻어내면 된다!

Pattern pattern = Pattern.compile(".*FBI.*"); 
Matcher matcher = pattern.matcher(agents[i]); 
if(matcher.find()) { 
results.add(i + 1);
}

** 정규표현식 중 어느 문자열에서 'FBI' 란 문자를 포함하는지 찾기 위해서는

"*FBI*" 가 아닌 ".*FBI.*" 을 사용해야 한다.

 

** 정규표현식 패턴 정리 표

 

소스 코드


package string;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

// FBI 문제
// 문자열 정규표현식으로 문자 포함 여부 체크해뵈
public class p2857 {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] agents = new String[5]; 
		for(int i = 0; i < 5; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String fbi = st.nextToken();
			agents[i] = fbi;
		}
		
		ArrayList<Integer> results = searchFBI(agents);
		if(results.isEmpty()) {
			System.out.println("HE GOT AWAY!");
		}
		else {
			for(int ele : results) {
				System.out.print(ele + " ");
			}	
		}
	}
	
	private static ArrayList<Integer> searchFBI(String[] agents) {
		ArrayList<Integer> results = new ArrayList<Integer>();
		for(int i = 0; i < 5; i++) {
			Pattern pattern = Pattern.compile(".*FBI.*");
			Matcher matcher = pattern.matcher(agents[i]);
			if(matcher.find()) {
				results.add(i + 1);
			}
		}
		return results;
	}
}

 

 

 

 

 

참고

https://cyr9210.github.io/2018/11/14/Java/java12/

 

Comments