반응형
이 문제는 알고리즘 스터디를 하는 도중 강사님께서 그리디 알고리즘 연습문제로 추천해주신 것이다.
차례대로 문자열을 입력받아 각각의 자리에 들어가는 A C G T의 개수를 세어주고
Math.max() 함수를 이용하여 갯수를 비교해주었고 가장 큰 값을 차례대로 입력했다.
입력할 때 사전 순으로 정렬하기 위해서 A C G T의 순서로 for문을 작성하였다.
max가 아닌 알파벳의 모든 갯수를 더해주어 Hamming Distance를 얻었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, M, result;
static String result1;
static String[][] arr;
static int[][] count;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str, " ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
result = 0;
result1= "";
arr = new String[N][M];
count = new int[M][4];
// A=0 C=1 G=2 T=3
for (int i = 0; N > i; ++i) {
str = br.readLine();
for (int j = 0; M > j; ++j) {
arr[i][j] = str.substring(j, j + 1);
}
} // 입력
for (int i = 0; N > i; ++i) {
for (int j = 0; M > j; ++j) {
switch (arr[i][j]) {
case "A":
count[j][0]++;
break;
case "C":
count[j][1]++;
break;
case "G":
count[j][2]++;
break;
case "T":
count[j][3]++;
break;
}
}
} // A C G T 갯수 세기
for (int j = 0; M > j; ++j) {
if (Math.max(Math.max(count[j][0], count[j][1]), Math.max(count[j][2], count[j][3])) == count[j][0]) {
result1 += "A";
result = result + count[j][1] + count[j][2] + count[j][3];
} else if (Math.max(Math.max(count[j][0], count[j][1]),
Math.max(count[j][2], count[j][3])) == count[j][1]) {
result1 += "C";
result = result + count[j][0] + count[j][2] + count[j][3];
} else if (Math.max(Math.max(count[j][0], count[j][1]),
Math.max(count[j][2], count[j][3])) == count[j][2]) {
result1 += "G";
result = result + count[j][1] + count[j][0] + count[j][3];
} else if (Math.max(Math.max(count[j][0], count[j][1]),
Math.max(count[j][2], count[j][3])) == count[j][3]) {
result1 += "T";
result = result + count[j][1] + count[j][2] + count[j][0];
}
}
// 사전순으로 출력하기 위해 A C G T 순으로 입력함.
System.out.println(result1);
System.out.print(result);
// 출력
}
}
반응형
'컴퓨터 > 백준' 카테고리의 다른 글
JAVA - 백준 알고리즘 - 1700 멀티탭 스케줄링 (0) | 2020.02.26 |
---|---|
JAVA - 백준 알고리즘 - 1080 행렬 (0) | 2020.02.26 |
JAVA - 백준 알고리즘 - 11399 ATM (0) | 2020.02.25 |
JAVA - 백준 알고리즘 - 1541 잃어버린 괄호 (0) | 2020.02.25 |
JAVA - 백준 알고리즘 - 1931번 회의실 배정 (0) | 2020.02.25 |