๐ ๋ฌธ์
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 |