ABOUT ME

woongS, iOS, succesS 삼쓰의 개발 블로그

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.