πŸ“– [λ°±μ€€μ•Œκ³ λ¦¬μ¦˜ 풀이] Q.9342 염색체 문제 풀이 - java

πŸ“– 문제

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

μƒκ·Όμ΄λŠ” 생λͺ…κ³Όν•™ μ—°κ΅¬μ†Œμ—μ„œ 염색체가 νŠΉμ •ν•œ νŒ¨ν„΄μΈμ§€λ₯Ό ν™•μΈν•˜λŠ” 일을 ν•˜κ³  μžˆλ‹€. μ—Όμƒ‰μ²΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμž (A, B, C, …, Z)둜만 이루어진 λ¬Έμžμ—΄μ΄λ‹€. μƒκ·Όμ΄λŠ” 각 염색체가 λ‹€μŒκ³Ό 같은 κ·œμΉ™μ„ λ§Œμ‘±ν•˜λŠ”μ§€ 검사해야 ν•œλ‹€.

λ¬Έμžμ—΄μ€ {A, B, C, D, E, F} 쀑 0개 λ˜λŠ” 1개둜 μ‹œμž‘ν•΄μ•Ό ν•œλ‹€.

  • κ·Έ λ‹€μŒμ—λŠ” Aκ°€ ν•˜λ‚˜ λ˜λŠ” κ·Έ 이상 μžˆμ–΄μ•Ό ν•œλ‹€.
  • κ·Έ λ‹€μŒμ—λŠ” Fκ°€ ν•˜λ‚˜ λ˜λŠ” κ·Έ 이상 μžˆμ–΄μ•Ό ν•œλ‹€.
  • κ·Έ λ‹€μŒμ—λŠ” Cκ°€ ν•˜λ‚˜ λ˜λŠ” κ·Έ 이상 μžˆμ–΄μ•Ό ν•œλ‹€.
  • κ·Έ λ‹€μŒμ—λŠ” {A, B, C, D, E, F} 쀑 0개 λ˜λŠ” 1κ°œκ°€ 있으며, 더 μ΄μƒμ˜ λ¬ΈμžλŠ” μ—†μ–΄μ•Ό ν•œλ‹€.

λ¬Έμžμ—΄μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ, μœ„μ˜ κ·œμΉ™μ„ λ§Œμ‘±ν•˜λŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ” 접근법

Q.9342 염색체 λ¬Έμ œμž…λ‹ˆλ‹€.

λ¬Έμ œμ—μ„œ 주어진 μ‘°κ±΄λŒ€λ‘œ νŠΉμ •ν•œ νŒ¨ν„΄μ΄ λ§žλŠ”μ§€ μ•„λ‹Œμ§€λ₯Ό ν™•μΈν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. μ •κ·œν‘œν˜„μ‹μ„ μ΄μš©ν•΄ μ•„λž˜μ™€ 같이 풀이가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

1.λ¬Έμžμ—΄μ€ {A, B, C, D, E, F} 쀑 0개 λ˜λŠ” 1개둜 μ‹œμž‘ν•΄μ•Ό ν•œλ‹€.                           
    =>  ^[A-F]?

2.κ·Έ λ‹€μŒμ—λŠ” Aκ°€ ν•˜λ‚˜ λ˜λŠ” κ·Έ 이상 μžˆμ–΄μ•Ό ν•œλ‹€.                                        
    =>  A+

3.κ·Έ λ‹€μŒμ—λŠ” Fκ°€ ν•˜λ‚˜ λ˜λŠ” κ·Έ 이상 μžˆμ–΄μ•Ό ν•œλ‹€.                                        
    =>  F+

4.κ·Έ λ‹€μŒμ—λŠ” Cκ°€ ν•˜λ‚˜ λ˜λŠ” κ·Έ 이상 μžˆμ–΄μ•Ό ν•œλ‹€.                                        
    =>  C+

5.κ·Έ λ‹€μŒμ—λŠ” {A, B, C, D, E, F} 쀑 0개 λ˜λŠ” 1κ°œκ°€ 있으며, 더 μ΄μƒμ˜ λ¬ΈμžλŠ” μ—†μ–΄μ•Ό ν•œλ‹€. 
    =>  [A-F]?$

=> String regex = β€œ^[A-F]?A+F+C+[A-F]?$”;

πŸ’» μ½”λ“œ

package problem.string.regex;

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

public class Main_9342 {

    static String[] strs;
    static int n;

    public static void main(String[] args) throws IOException {
        input();
        String answer = solve();
        System.out.println(answer);
    }

    public static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        strs = new String[n];
        for(int i=0; i<n; i++){
            strs[i] = br.readLine();
        }
        br.close();
    }

    public static String solve() {
        StringBuilder sb = new StringBuilder();
        String regex = "^[A-F]?A+F+C+[A-F]?$";
        for(int i=0; i<n; i++) {
            if( Pattern.matches(regex, strs[i]) == true){
                sb.append("Infected!\n");
            }
            else {
                sb.append("Good\n");
            }
        }
        return sb.toString();
    }
}
Written on March 30, 2021