[코딩테스트][백준] 🔥 백준 12891번 "DNA 비밀번호" 문제: Java로 완벽 해결하기! 🔥

김상욱·2024년 8월 14일
0
post-thumbnail

문제 링크

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

🕒 Java 풀이시간: 30분

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int s=sc.nextInt();
        int p=sc.nextInt();
        String dna_s=sc.next();
        int a=sc.nextInt();
        int c=sc.nextInt();
        int g=sc.nextInt();
        int t=sc.nextInt();
        int answer=0;
        int length=0;

        int a_cnt=0;
        int c_cnt=0;
        int g_cnt=0;
        int t_cnt=0;
        int start=-1;
        for(int i=0;i<s;i++){
            char now=dna_s.charAt(i);
            if(length<p){
                length++;
                if(now=='A')
                    a_cnt++;
                if(now=='C')
                    c_cnt++;
                if(now=='G')
                    g_cnt++;
                if(now=='T')
                    t_cnt++;   
            }else{
                if(now=='A')
                    a_cnt++;
                if(now=='C')
                    c_cnt++;
                if(now=='G')
                    g_cnt++;
                if(now=='T')
                    t_cnt++;   
            }
            if(length==p){
                if(start>=0){
                    char end=dna_s.charAt(start);
                    if(end=='A')
                        a_cnt--;
                    if(end=='C')
                        c_cnt--;
                    if(end=='G')
                        g_cnt--;
                    if(end=='T')
                        t_cnt--; 
                }
                start++;
                if(a<=a_cnt&&c<=c_cnt&&g<=g_cnt&&t<=t_cnt)
                    answer++;
            }
        }
        System.out.println(answer);
    }
}

DNA 비밀번호의 부분문자열 찾기 🧬🔍

각 주어진 DNA 비밀번호 문자열에 대해서 해당 문자열에 포함된 갯수를 확인하면서 부분문자열을 만들어 그 갯수를 구하는 문제이다.

포인터를 두개로 두어 앞과 뒤에서 부터 진행한다고 생각하고 뒤에 부분을 증가시키는 대로 뒤에 또한 증가시키면 각 포인터에서의 어떤 글자가 추가되고 빠지는지 갯수로 파악하여 1회만 순환이 되도록 한다. 해당 부분이 조건을 만족할 때만 세어서 정답으로 출력하면 된다.

이렇게 Java로 백준의 "DNA 비밀번호" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊

0개의 댓글