ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1969 DNA
    Algorithm/BOJ 2020. 6. 15. 14:07
    728x90

    출처: 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

    댓글

Designed by Tistory.