Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 클린코드
- API
- 개발
- 애자일
- 그리디알고리즘
- JPA
- 그리디
- 알고리즘
- database
- 프레임워크
- 코딩테스트
- 자바
- 데이터베이스
- 스프링
- Java
- ES
- framework
- 애자일프로그래밍
- cleancode
- 백준
- 애자일기법
- Baekjoon
- 읽기쉬운코드
- 코드
- 개발자
- Elasticsearch
- 엘라스틱서치
- Spring
- 코딩
- spring boot
Archives
- Today
- Total
튼튼발자 개발 성장기🏋️
[1969번] DNA 본문
반응형
문제 기출 : [https://www.acmicpc.net/problem/1969]
풀이 방법
[그리디알고리즘] 접근
해답의 가장 큰 핵심은 각 N개의 DNA의 각 M번째 자리수(char)가 가장 많은 문자를 출력하고 카운팅해주면 된다.
가장 좋았던 조건. 체크해야할 문자를 4개로 제한 한것. (만약 제한이 없고 Alphanumeric이었다면 과연 어땠을까..?ㅠㅠ)
2중 for문을 이용해서 N개의 DNA를 탐색하면서 각 자리의 char를 체크한다. A면 A를 카운팅, T면 T를 카운팅 ····.
카운팅 된 수 중, 가장 큰 값을 채택하고 그 값을 N에서 뺀 것을 누적하여 더해주면 Hamming Distance의 합이 될 수 있다!!! 채택된 해당 max값을 가진 char를 가지고 온다. 그 값이 바로 우리가 구할 s의 자리 값이다.
난 이 부분에서 '사전식 우선순위'를 잊고 있었다. 그래서 왜 때문인지 계속 실패했다... 문제를 3번 정도 다시 읽어서야 사전식 우선순위를 추가하지 않았다는 사실을 깨달았다.... 바로 fix하고 돌려보니 성공...핳핳ㅎ..... |
문제 풀이
public class Main {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = 0;
int M = 0;
StringTokenizer tokens = null;
int ACount = 0;
int TCount = 0;
int GCount = 0;
int CCount = 0;
int maxCount = 0;
int sumHammingDistance = 0;
try {
tokens = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(tokens.nextToken());
M = Integer.parseInt(tokens.nextToken());
String[] DNAs = new String[N];
for (int i = 0; i < N; i++) {
DNAs[i] = br.readLine();
}
for (int i = 0; i < M; i++) {
ACount = 0;
TCount = 0;
GCount = 0;
CCount = 0;
for (int j = 0; j < N; j++) {
switch (DNAs[j].charAt(i)) {
case 'A':
ACount++;
break;
case 'T':
TCount++;
break;
case 'G':
GCount++;
break;
case 'C':
CCount++;
break;
default:
break;
}
}
maxCount = Math.max(ACount > TCount ? ACount : TCount, GCount > CCount ? GCount : CCount);
sumHammingDistance += (N - maxCount);
if(maxCount == ACount) {
System.out.print('A');
} else if(maxCount == CCount) {
System.out.print('C');
} else if(maxCount == GCount) {
System.out.print('G');
} else {
System.out.print('T');
}
}
System.out.println();
System.out.println(sumHammingDistance);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
반응형
'Business logic > 백준' 카테고리의 다른 글
[2217번] 로프 (0) | 2020.04.15 |
---|---|
[1946번] 신입 사원 (0) | 2020.04.14 |
[1931번] 회의실배정 (0) | 2020.04.13 |
[1541번] 잃어버린 괄호 (0) | 2020.04.12 |
[1439번] 뒤집기 (0) | 2020.04.12 |