티스토리 뷰
문제 - (https://www.acmicpc.net/problem/1969)
개인적으로 그리디 문제에 약하다고 생각해서 최근 그리디 문제를 많이 풀어보고 있다
여전히 오답이 많고 시간도 오래걸려서 좌절해있다가... 이 문제만큼은 자신있게 풀고 완벽히 이해하여 포스팅하려고 한다
(내가 생각해낸 방법이 기특해서 다음에 잊지않게 하기 위해서 ㅋㅋ)
그냥,, 간단하다!
주어진 DNA의 각 자릿수 알파벳의 수를 센다.각 자리마다 가장 많이 출현한 알파벳을 선정하면 그것이 답이된다!
우선, 알파벳의 길이만큼의 배열을 만들었다. 알파벳은 총 26개 있으니 alphabet[26]인 배열을 만든 것이다.
DNA들의 알파벳 수를 각 자릿수별로 세야하므로 alphabet[m][26]의 2차원 배열을 만들면 이렇게 해석할 수 있다.
DNA들의 m번째 자리에 있는 알파벳들의 수를 저장한다.
이 방법을 이용해서 모든 DNA를 순회하면서 각 자릿수별로 발견되는 알파벳의 카운트를 늘려주면 된다.
아래 코드를 보면 이해가 더 쉬울듯!
📌주의할 점
- char형을 int형으로 바꾸는 쉬운 방법은 'A'-0 이다. 즉, char에 int형 연산을 해주면 된다!! 이걸 활용해서 풀면 된다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
* 30분 - 실버5
*/
public class DNA {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // dna 수
int m = Integer.parseInt(st.nextToken()); // 문자열의 길이
int[][] alphabet = new int[m][26];
StringBuilder sb = new StringBuilder();
int hammingDistance = 0;
String[] dnas = new String[n];
for (int i = 0; i < n; i++) {
dnas[i] = br.readLine();
for (int j = 0; j < m; j++) {
/* 굳이 A가 int로 65인 것을 생각할 필요없이 'A'를 빼주면 된다. */
alphabet[j][dnas[i].charAt(j) - 'A'] += 1;
}
}
for (int i = 0; i < m; i++) {
int max = alphabet[i][0];
char target = 'A';
for (int j = 0; j < 26; j++) {
if (alphabet[i][j] > max) {
max = alphabet[i][j];
target = (char) (j + 'A');
}
}
sb.append(target);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (dnas[i].charAt(j) != sb.charAt(j)) hammingDistance++;
}
}
System.out.println(sb.toString());
System.out.println(hammingDistance);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 3109번 / Java / 빵집 (0) | 2020.08.27 |
---|---|
[백준 BOJ] 16235번 / Java / 나무 재테크 (1) | 2020.08.15 |
[백준] 13458번 / Java / 시험 감독 - 그리디 (0) | 2020.06.25 |
[백준] 15685번 / Java / 드래곤 커브 - 구현, 시뮬레이션 (0) | 2020.06.25 |
[백준] 14503번 / Java / 로봇 청소기 - 구현, 시뮬레이션 (0) | 2020.06.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 16234
- 코딩테스트
- 브라우저 요청
- 프로그래머스
- 코테
- header
- 시뮬레이션
- 배열순회
- Greedy
- 백준
- 구명보트
- Access-Control-Allow-Origin
- 14891
- 완전탐색
- 구현
- 우선순위큐
- 인구이동
- 톱니바퀴
- 자바
- 드래곤 커브
- dfs
- BOJ
- 그리디
- 큰 수 만들기
- 코딩테스트 연습
- java
- withCredentials
- 아기상어
- 재귀
- 사다리 조작
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함