문제 풀이
완전탐색 문제
A,C,G,T를 사전순대로 배열에 넣고 세로 줄 한 줄씩 돌면서 A,C,G,T 문자에 맞게 배열 인덱스를 높인다.
이후 max값과 index값을 찾고 sb에 추가한다.
이걸 8번 반복하고 나면 문자열이 만들어지는데 이 문자열을 dnaArr과 비교하면서 다를 경우 hd값을 올린다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
Character[][] dnaArr = new Character[N][M];
for (int i = 0; i < N; i++) {
String str = br.readLine();
for (int j = 0; j < M; j++) {
dnaArr[i][j] = str.charAt(j);
}
}
for (int i = 0; i < M; i++) {
int[] arr = new int[4]; //ACGT
for (int j = 0; j < N; j++) {
if (dnaArr[j][i] == 'A')
arr[0]++;
if (dnaArr[j][i] == 'C')
arr[1]++;
if (dnaArr[j][i] == 'G')
arr[2]++;
if (dnaArr[j][i] == 'T')
arr[3]++;
}
int max = -1;
int index = -1;
for (int j = 0; j < arr.length; j++) {
if(max<arr[j]){
max=arr[j];
index = j;
}
}
if (index == 0)
sb.append("A");
if (index == 1)
sb.append("C");
if (index == 2)
sb.append("G");
if (index == 3)
sb.append("T");
}
int hd = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (dnaArr[i][j] != sb.charAt(j)) {
hd++;
}
}
}
System.out.println(sb.toString());
System.out.println(hd);
}
}
'알고리즘 리뷰' 카테고리의 다른 글
| 백준 JAVA 14503 로봇청소기 리뷰 (1) | 2024.02.10 |
|---|---|
| 백준 JAVA 10971 외판원 순회 2 리뷰 (1) | 2024.02.09 |
| 백준 JAVA 1389 케빈 베이컨의 6단계 법칙 리뷰 (0) | 2024.02.07 |
| 백준 JAVA 5766 할아버지는 유명해 리뷰 (0) | 2024.02.03 |
| 백준 JAVA 7576번 토마토 리뷰 (0) | 2023.08.31 |