[백준] 2857. FBI

1 분 소요

문제 링크

[백준] 2857. FBI


풀이 과정

정규식을 활용해 자바와 자바스크립트 두 언어로 문제를 풀었습니다.

Matcher 클래스의 matchesfind 메소드의 차이점은 다음과 같습니다.

  • matches 는 입력 받은 문자열이 주어진 Pattern 과 전부 매치되면 true 를 리턴합니다.
  • find 는 입력 문자열이 주어진 Pattern 과 일치되는 부분 문자열이 있으면 true 를 리턴합니다.


Pattern pattern = Pattern.compile("FBI");
Matcher matcher = pattern.matcher("47-FBI");

System.out.println(matcher.matches()); // false
System.out.println(matcher.find());    // true

예를 들어, 패턴이 “FBI” 이고, 검색 하려는 문자열이 “47-FBI” 인 경우를 보겠습니다.

  • matches 메소드 를 호출할 시, 입력 문자열 “47-FBI” 는 패턴 문자열 “FBI” 와 전부 일치하지 않으므로 false 를 리턴합니다.
  • 반면, find 메소드 를 호출할 시, 입력 문자열 “47-FBI” 에서 패턴 문자열 “FBI”와 일치하는 부분 문자열 “FBI”가 존재하므로 true 를 리턴합니다.


Pattern pattern = Pattern.compile(".*FBI*.");
Matcher matcher = pattern.matcher("47-FBI");

System.out.println(matcher.matches()); // true

반면, 패턴을 “.FBI.” 로 설정하고 matches 메소드 를 호출할 시, 전체 문자열이 패턴과 일치하기 때문에 true 를 리턴합니다.


코드

Java

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder answer = new StringBuilder();
        Pattern pattern = Pattern.compile("FBI");
        int idx = 0;

        while (idx++ < 5) {
            Matcher matcher = pattern.matcher(br.readLine());
            if (matcher.find()) answer.append(idx + " ");
        }

        System.out.println(answer.length() == 0 ? "HE GOT AWAY!" : answer);
    }
}

JS

const fs = require("fs");
const stdin = (process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `47-FBI
BOND-007
RF-FBI18
MARICA-13
13A-FBILL`
).split("\n");

const input = (() => {
    let line = 0;
    return () => stdin[line++];
})();

let idx = 0;
let answer = [];
let regex = /FBI/g;

while (idx++ < 5) {
    let str = input();
    if (str.search(regex) != -1) answer.push(idx);
}

console.log(answer.length == 0 ? "HE GOT AWAY!" : answer.join(" "));

카테고리:

업데이트:

댓글남기기