Home ๐Ÿฃ ๋ฐฑ์ค€ Q12891 - DNA ๋น„๋ฐ€๋ฒˆํ˜ธ (java)
Post
Cancel

๐Ÿฃ ๋ฐฑ์ค€ Q12891 - DNA ๋น„๋ฐ€๋ฒˆํ˜ธ (java)


๋ฌธ์ œ




๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง€๊ณ 
๊ทธ ๋ฌธ์ž์—ด์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋งŒ๋“ค๊ฒƒ์ด๋‹ค.

๋ถ€๋ถ„๋ฌธ์ž์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ˆ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด
2๊ฐœ์˜ ํฌ์ธํ„ฐ๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•œ ๋‹ค์Œ
๋ฒ”์œ„(window)๋ฅผ ์œ ์ง€ํ•œ ์ฑ„๋กœ ์ด๋™(sliding)ํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ๊ฒƒ์ด๋‹ค.


์กฐ๊ฑด์€ A, C, G, T์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์ถฉ์กฑํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ์ฝ”๋“œ์—์„œ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถฉ์กฑํ•  ๋•Œ๋งˆ๋‹ค checkSecret์˜ ๊ฐœ์ˆ˜๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๊ณ 
checkSecret์ด 4๊ฐ€ ๋˜๋ฉด 4๊ฐœ์˜ ๋ฌธ์ž ๋ชจ๋‘ ์กฐ๊ฑด์— ์ถฉ์กฑ๋œ ๊ฒƒ์œผ๋กœ
๋น„๋ฐ€ ๋ฒˆํ˜ธ ์ข…๋ฅ˜์˜ ์ˆ˜ ํ•˜๋‚˜๊ฐ€ ์™„์„ฑ๋œ๋‹ค. (Result++)

๊ทธ๋ ‡๊ฒŒ ๊ตฌํ•œ ๊ฐœ์ˆ˜์˜ ์ดํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.



์ˆ˜๋„ ์ฝ”๋“œ


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
S(๋ฌธ์ž์—ด ํฌ๊ธฐ) P(๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ)
A(๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ)
checkArr(๋น„๋ฐ€๋ฒˆํ˜ธ ์ฒดํฌ ๋ฐฐ์—ด)
myArr(ํ˜„์žฌ ์ƒํƒœ ๋ฐฐ์—ด)
checkSecret(๋ช‡ ๊ฐœ์˜ ๋ฌธ์ž์™€ ๊ด€๋ จ๋œ ๊ฐœ์ˆ˜๋ฅผ ์ถฉ์กฑํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ณ€์ˆ˜)

P ๋ฒ”์œ„(0 ~ P - 1)๋งŒํผ S ๋ฐฐ์—ด์— ์ ์šฉํ•˜๊ณ , ์œ ํšจํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์ธ์ง€ ํŒ๋‹จํ•˜๊ธฐ
for(i๋ฅผ P์—์„œ S๊นŒ์ง€ ๋ฐ˜๋ณต)
{
  j ์„ ์–ธ(i - P)
  // ์ด ๋ถ€๋ถ„์€ ํ•จ์ˆ˜๋กœ ๋ณ„๋„ ๊ตฌํ˜„ํ•˜๊ธฐ
  ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉด์„œ ์ œ๊ฑฐ๋˜๋Š” ๋ฌธ์ž์—ด๊ณผ ์ƒˆ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ
  ์œ ํšจํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์ธ์ง€(checkSecret == 4) ํŒ๋‹จํ•ด ๊ฒฐ๊ด๊ฐ’์— ์—…๋ฐ์ดํŠธํ•˜๊ธฐ
}
๊ฒฐ๊ด๊ฐ’ ์ถœ๋ ฅํ•˜๊ธฐ

//๋ณ„๋„ ํ•จ์ˆ˜

Add(๋ฌธ์ž ๋”ํ•˜๊ธฐ ํ•จ์ˆ˜)
{
  ์ƒˆ๋กœ ๋“ค์–ด์˜จ ๋ฌธ์ž๋ฅผ myArr์— ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ checkSecret ๊ฐ’ ๋ณ€๊ฒฝํ•˜๊ธฐ
}

Remove(๋ฌธ์ž ๋นผ๊ธฐ ํ•จ์ˆ˜)
{
  ์ œ๊ฑฐ๋˜๋Š” ๋ฌธ์ž๋ฅผ myArr์— ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ checkSecret ๊ฐ’ ๋ณ€๊ฒฝํ•˜๊ธฐ
}



์ฝ”๋“œ


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import java.io.*;
import java.util.*;

public class Q12891_DNA๋น„๋ฐ€๋ฒˆํ˜ธ {
	
  static int checkArr[]; // ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฒดํฌ ๋ฐฐ์—ด
  static int myArr[]; // ํ˜„์žฌ์ƒํƒœ ๋ฐฐ์—ด
  static int checkSecret; // ๋ช‡ ๊ฐœ์˜ ๋ฌธ์ž์™€ ๊ด€๋ จ๋œ ๊ฐœ์ˆ˜๋ฅผ ์ถฉ์กฑํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ณ€์ˆ˜

  public static void main(String[] args) throws NumberFormatException, 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;
    char ArrS[];

    checkArr = new int[4]; // ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฒดํฌ ๋ฐฐ์—ด, ๋ช‡๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์ด ํ•„์š”ํ•œ์ง€
    myArr = new int[4]; // ํ˜„์žฌ์ƒํƒœ ๋ฐฐ์—ด
    checkSecret = 0; // ๋ช‡ ๊ฐœ์˜ ๋ฌธ์ž์™€ ๊ด€๋ จ๋œ ๊ฐœ์ˆ˜๋ฅผ ์ถฉ์กฑํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ณ€์ˆ˜

    ArrS = br.readLine().toCharArray(); // (2๋ฒˆ์งธ ์ค„) ArrS[] = {C, C, T, G, G, A, T, T, G}
    st = new StringTokenizer(br.readLine()); //
    for (int i = 0; i < 4; i++) {
      checkArr[i] = Integer.parseInt(st.nextToken()); // (3๋ฒˆ์งธ ์ค„) checkArr[] = {2, 0, 1, 1}
      if (checkArr[i] == 0)
        checkSecret++; // ์ด๋ฏธ ์กฐ๊ฑด์— ์ถฉ์กฑํ–ˆ์œผ๋‹ˆ 1
    }
	
    for (int i = 0; i < P; i++) { // ์ดˆ๊ธฐ P ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ๋ถ€๋ถ„
      Add(ArrS[i]);
    }
	
    if (checkSecret == 4) // ์นด์šดํŠธ ๋งŒ์กฑ ์กฐ๊ฑด, 4๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ๋ชจ๋‘ ์กฐ๊ฑด์— ๋งŒ์กฑ 1+1+1+1
      Result++;
	
    // ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„
    for (int i = P; i < S; i++) {
      int j = i - P;
      Add(ArrS[i]);
      Remove(ArrS[j]);
      if (checkSecret == 4) // 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;
    }
  }
  
/*
----- ์˜ˆ์ œ ์ž…๋ ฅ 1 -----
9 8
CCTGGATTG
2 0 1 1
----- ์˜ˆ์ œ ์ถœ๋ ฅ 1 -----
0

----- ์˜ˆ์ œ ์ž…๋ ฅ 2 -----
4 2
GATA
1 0 0 1
----- ์˜ˆ์ œ ์ถœ๋ ฅ 2 -----
2
 */
  
}
This post is licensed under CC BY 4.0 by the author.

๐Ÿฃ ๋ฐฑ์ค€ Q11003 - ์ตœ์†Œ๊ฐ’ ์ฐพ๊ธฐ (java)

/Database/ ๐Ÿ’ฌ แ„‘แ…กแ„แ…ตแ„‰แ…งแ„‚แ…ตแ†ผ, แ„‰แ…ฃแ„ƒแ…ตแ†ผ, ๋ฆฌแ„‘แ…ณแ†ฏแ„…แ…ตแ„แ…ฆแ„‹แ…ตแ„‰แ…งแ†ซ