From b74d6a7107da0e341fc50dff7db563b1c534e52d Mon Sep 17 00:00:00 2001 From: kdg0209 Date: Sun, 14 May 2023 00:58:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EC=98=88=EC=A0=9C=209=EB=B2=88?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/doit/algorithm/kdg/Main.java | 97 +++++++++++++++++++ .../com/doit/algorithm/kdg/Problem009.java | 80 +++++++++++++++ .../doit/algorithm/kdg/Problem009Test.java | 30 ++++++ 3 files changed, 207 insertions(+) create mode 100644 src/main/java/com/doit/algorithm/kdg/Main.java create mode 100644 src/main/java/com/doit/algorithm/kdg/Problem009.java create mode 100644 src/test/java/com/doit/algorithm/kdg/Problem009Test.java diff --git a/src/main/java/com/doit/algorithm/kdg/Main.java b/src/main/java/com/doit/algorithm/kdg/Main.java new file mode 100644 index 0000000..ccf43d4 --- /dev/null +++ b/src/main/java/com/doit/algorithm/kdg/Main.java @@ -0,0 +1,97 @@ +package com.doit.algorithm.kdg; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class Main { + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int n = Integer.parseInt(st.nextToken()); // 9 + int len = Integer.parseInt(st.nextToken()); // 8 + String words = br.readLine(); // DNA 문자열 + String s = br.readLine(); // 포함 갯수 + + int result = solution(n, len, words, s); + + System.out.println(result); + } + + public static int solution(int n, int len, String s, String max) { + int result = 0; + char[] words = new char[n]; + int[] includes = new int[4]; + int[] myIncludes = new int[4]; + + for (int i = 0; i < s.length(); i++) { + words[i] = s.charAt(i); + } + + String[] split = max.split(" "); + for (int i = 0; i < split.length; i++) { + includes[i] = Integer.parseInt(split[i]); + } + + char[] move = move(0, len, words); + add(move, myIncludes); + boolean checked = checked(myIncludes, includes); + if (checked) result++; + + for (int i = len; i < n; i++) { + int next = n - len; + move = move(next, len, words); + init(myIncludes); + add(move, myIncludes); + checked = checked(myIncludes, includes); + if (checked) result++; + } + + return result; + } + + private static char[] move(int start, int end, char[] words) { + char[] result = new char[end]; + int index = 0; + + for (int i = start; i < start + end; i++) { + result[index++] = words[i]; + } + return result; + } + + private static void add(char[] move, int[] myIncludes) { + for (int i = 0; i < move.length; i++) { + switch (move[i]) { + case 'A': + myIncludes[0]++; + break; + case 'C': + myIncludes[1]++; + break; + case 'G': + myIncludes[2]++; + break; + case 'T': + myIncludes[3]++; + break; + default: + throw new IllegalArgumentException(); + } + } + } + + private static void init(int[] myIncludes) { + for (int i = 0; i < myIncludes.length; i++) { + myIncludes[i] = 0; + } + } + + private static boolean checked(int[] myIncludes, int[] includes) { + return myIncludes[0] == includes[0] && + myIncludes[1] == includes[1] && + myIncludes[2] == includes[2] && + myIncludes[3] == includes[3]; + } +} diff --git a/src/main/java/com/doit/algorithm/kdg/Problem009.java b/src/main/java/com/doit/algorithm/kdg/Problem009.java new file mode 100644 index 0000000..61c78a9 --- /dev/null +++ b/src/main/java/com/doit/algorithm/kdg/Problem009.java @@ -0,0 +1,80 @@ +package com.doit.algorithm.kdg; + +public class Problem009 { + + public static int solution(int n, int len, String s, String max) { + int result = 0; + char[] words = new char[n]; + int[] includes = new int[4]; + int[] myIncludes = new int[4]; + + for (int i = 0; i < s.length(); i++) { + words[i] = s.charAt(i); + } + + String[] split = max.split(" "); + for (int i = 0; i < split.length; i++) { + includes[i] = Integer.parseInt(split[i]); + } + + char[] move = move(0, len, words); + add(move, myIncludes); + boolean checked = checked(myIncludes, includes); + if (checked) result++; + + for (int i = len; i < n; i++) { + int next = n - len; + move = move(next, len, words); + init(myIncludes); + add(move, myIncludes); + checked = checked(myIncludes, includes); + if (checked) result++; + } + + return result; + } + + private static char[] move(int start, int end, char[] words) { + char[] result = new char[end]; + int index = 0; + + for (int i = start; i < start + end; i++) { + result[index++] = words[i]; + } + return result; + } + + private static void add(char[] move, int[] myIncludes) { + for (int i = 0; i < move.length; i++) { + switch (move[i]) { + case 'A': + myIncludes[0]++; + break; + case 'C': + myIncludes[1]++; + break; + case 'G': + myIncludes[2]++; + break; + case 'T': + myIncludes[3]++; + break; + default: + throw new IllegalArgumentException(); + } + } + } + + private static void init(int[] myIncludes) { + for (int i = 0; i < myIncludes.length; i++) { + myIncludes[i] = 0; + } + } + + private static boolean checked(int[] myIncludes, int[] includes) { + return myIncludes[0] == includes[0] && + myIncludes[1] == includes[1] && + myIncludes[2] == includes[2] && + myIncludes[3] == includes[3]; + } +} diff --git a/src/test/java/com/doit/algorithm/kdg/Problem009Test.java b/src/test/java/com/doit/algorithm/kdg/Problem009Test.java new file mode 100644 index 0000000..dc357e3 --- /dev/null +++ b/src/test/java/com/doit/algorithm/kdg/Problem009Test.java @@ -0,0 +1,30 @@ +package com.doit.algorithm.kdg; + +import org.junit.jupiter.api.Test; + +public class Problem009Test { + + @Test + void test() { + int n = 9; + int len = 8; + String s = "CCTGGATTG"; + String includes = "2 0 1 1"; + + int result = Problem009.solution(n, len, s, includes); + + System.out.println("result : " + result); + } + + @Test + void test_2() { + int n = 4; + int len = 2; + String s = "GATA"; + String includes = "1 0 0 1"; + + int result = Problem009.solution(n, len, s, includes); + + System.out.println("result : " + result); + } +} From f1e19a7c620d77b49c4bc9ee493c9b794ae3e447 Mon Sep 17 00:00:00 2001 From: kdg0209 Date: Sun, 14 May 2023 01:00:37 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=98=88=EC=A0=9C=209=EB=B2=88?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/doit/algorithm/kdg/Problem009Test.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/doit/algorithm/kdg/Problem009Test.java b/src/test/java/com/doit/algorithm/kdg/Problem009Test.java index dc357e3..ce7ba44 100644 --- a/src/test/java/com/doit/algorithm/kdg/Problem009Test.java +++ b/src/test/java/com/doit/algorithm/kdg/Problem009Test.java @@ -2,10 +2,12 @@ import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + public class Problem009Test { @Test - void test() { + void solution_1() { int n = 9; int len = 8; String s = "CCTGGATTG"; @@ -13,11 +15,11 @@ void test() { int result = Problem009.solution(n, len, s, includes); - System.out.println("result : " + result); + assertThat(result).isEqualTo(0); } @Test - void test_2() { + void solution_2() { int n = 4; int len = 2; String s = "GATA"; @@ -25,6 +27,6 @@ void test_2() { int result = Problem009.solution(n, len, s, includes); - System.out.println("result : " + result); + assertThat(result).isEqualTo(2); } }