Algorithms/๋ฐฑ์ค€

[12891๋ฒˆ] DNA ๋น„๋ฐ€๋ฒˆํ˜ธ

hyunki.Dev 2023. 9. 21. 15:33

 

๐Ÿ“Œ ๋ฌธ์ œ

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