๐ ๋ฌธ์
https://www.acmicpc.net/problem/12891
12891๋ฒ: DNA ๋น๋ฐ๋ฒํธ
ํ์์ ๋ฌธ์์ด์ ๊ฐ์ง๊ณ ๋ ธ๋ ๊ฒ์ ์ข์ํ๋ ๋ฏผํธ๋ DNA ๋ฌธ์์ด์ ์๊ฒ ๋์๋ค. DNA ๋ฌธ์์ด์ ๋ชจ๋ ๋ฌธ์์ด์ ๋ฑ์ฅํ๋ ๋ฌธ์๊ฐ {โAโ, โCโ, โGโ, โTโ} ์ธ ๋ฌธ์์ด์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด โACKAโ
www.acmicpc.net
๐ ํ์ด
- ํด๋น ๋ฌธ์ ๋ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ ์ ์์ต๋๋ค.
- ์ฌ๋ผ์ด๋ฉ ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ์ ๋ง์น ์ฐฝ๋ฌธ์ ๋ฐ๋ฏ์ด ๋ฐฐ์ด์ ํ์ํ๋ฉด์ ์ด๋ ์ถ๊ฐ๋๋ ๋ฐฐ์ด ๋ถ๋ถ๋ง์ ๊ฒ์ฌํ๊ณ ํ์๋ฒ์๊ฐ ๋ฐ๋ฆฌ๋ฉด์ ์ ๋ถ๋ถ ๋ฐฐ์ด๊ฐ์ ์ญ์ ํ๋ ๊ฒ์ ๋๋ค.
- ์ด๋ฅผ ํตํด ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๐ ์ฝ๋
import java.io.*; import java.util.*; class Main { static int myArr[]; static int checkArr[]; static int checkSecret; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int S = Integer.parseInt(st.nextToken()); int P = Integer.parseInt(st.nextToken()); int Result = 0; checkArr = new int[4]; //๋น๋ฐ๋ฒํธ ์ฒดํฌ๋ฐฐ์ด A,C,G,T ๊ฐ ๋ช ๊ฐ ์ด์์ด์ด์ผ ํ๋์ง myArr = new int[4]; //ํ์ฌ ๋ด ๋ฐฐ์ด์ ์ํ A,C,G,T ๊ฐ์ char A[] = new char[S]; //์ฃผ์ด์ง๋ DNA ๋ฌธ์์ด checkSecret = 0; //ํ์ฌ 4๊ฐ์ค์ ๋ช๊ฐ๊ฐ ๋น๋ฐ๋ฒํธ ์กฐ๊ฑด์ ๋ง์กฑํ๋๊ฐ A = br.readLine().toCharArray(); // DNA ๋ฌธ์์ด์ Array๋ก ๋ฐ์ st = new StringTokenizer(br.readLine()); for(int i = 0; i<4; i++){ checkArr[i] = Integer.parseInt(st.nextToken()); if(checkArr[i] == 0){ checkSecret++; //0์ด๋ฉด 0๊ฐ์ด์์ธ๊ฒ์ ์๋ฏธํ๋ฏ๋ก ๋ชจ๋ ๋ง์กฑํ์ฌ ++ } } for(int i = 0; i<P; i++){ //๋ถ๋ถ๋ฌธ์์ด์ ์ฒ์ ๋ฐ์ ๋ ์ธํ
ํ๋ ๋ถ๋ถ ['C','C','A','G'] Add(A[i]); } if(checkSecret == 4) Result++; //์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์ ์ฉ for(int i = P; i < S; i++){ int j = i - P; Add(A[i]); //์ถ๊ฐ๋ก ๋ค์ด๊ฐ๋ ๋น๋ฐ๋ฒํธ ๊ฐ๋ง ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. Remove(A[j]); if(checkSecret == 4) Result++; } System.out.println(Result); br.close(); } private static void Add(char c){ switch (c){ case 'A': myArr[0]++; if(myArr[0] == checkArr[0]) checkSecret++; break; case 'C': myArr[1]++; if(myArr[1] == checkArr[1]) checkSecret++; break; case 'G': myArr[2]++; if(myArr[2] == checkArr[2]) checkSecret++; break; case 'T': myArr[3]++; if(myArr[3] == checkArr[3]) checkSecret++; break; } } private static void Remove(char c){ switch (c){ case 'A': if(myArr[0] == checkArr[0]) checkSecret--; myArr[0]--; break; case 'C': if(myArr[1] == checkArr[1]) checkSecret--; myArr[1]--; break; case 'G': if(myArr[2] == checkArr[2]) checkSecret--; myArr[2]--; break; case 'T': if(myArr[3] == checkArr[3]) checkSecret--; myArr[3]--; break; } } }
'Algorithms > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[1940๋ฒ] ์ฃผ๋ชฝ์ ๋ช ๋ น (0) | 2023.09.21 |
---|---|
Java ์์ ์ ๋ ฅ ๊ฐ ๋ฐ์์ค๊ธฐ (0) | 2023.06.12 |