-
백준 1969 DNAAlgorithm/BOJ 2020. 6. 15. 14:07728x90
출처: www.acmicpc.net/problem/1969
분류: 그리디
접근방식
주어진 DNA 들의 각 인덱스를 보면서 DNA 원소인 A T G C 중에 가장 많은 녀석을 골라 Hamming Distance가 가장 작은 DNA를 만들면 되는 문제입니다.
각 인덱스에서 Hamming Distance는 가장 많이 DNA들의 개수 - 선택한 원소의 개수 가 됩니다.
해결방법
let n = readLine()!.split(separator: " ").map {Int($0)!} var dnas = [[String.Element]]() for _ in 0..<n[0] { dnas.append(Array(readLine()!)) } var result = "" var hDistance = 0 for i in 0..<n[1] { // A C G T var check = [0, 0, 0, 0] var selected = 0 for j in 0..<dnas.count { switch dnas[j][i] { case "A": check[0] += 1 case "C": check[1] += 1 case "G": check[2] += 1 case "T": check[3] += 1 default: continue } } for (dna, count) in check.enumerated() { if check[selected] < count { selected = dna } } switch selected { case 0: result += "A" case 1: result += "C" case 2: result += "G" case 3: result += "T" default: continue } hDistance += dnas.count - check[selected] } print(result) print(hDistance)
배운점
간단한 문제였다.
사전순으로 찾질 않아서 두 번이나 틀렸다. 문제를 보면서 인식하고 있었는데도, 습관적으로 문제의 설명대로인 ATGC 순으로 해버렸다;;
실전에서 이러면.. 끔찍하다.. 이런 문제일수록 실수하지 말고 확실하게 풉시다.
'Algorithm > BOJ' 카테고리의 다른 글
백준 7568 덩치 (0) 2020.06.16 백준 1065 한수 (0) 2020.06.15 백준 1543 문서 검색 (0) 2020.06.15 BOJ 백준 1449 수리공 항승 (0) 2020.06.13 백준 2437 저울 (0) 2020.06.13