반응형

백준 2160번 문제입니다. (solved.ac) 기준 브론즈 1 문제입니다.

https://www.acmicpc.net/problem/2160

 

2160번: 그림 비교

N(2 ≤ N ≤ 50)개의 그림이 있다. 각각의 그림은 5×7의 크기이고, 두 가지 색으로 되어 있다. 이때 두 가지의 색을 각각 ‘X’와 ‘.’으로 표현하기로 하자. 이러한 그림들이 주어졌을 때, 가장 비

www.acmicpc.net

문제

문제 접근

그림은5 * 7의 크기이고 1 * 1 크기에 . 혹은 X가 그려져있습니다.
그림의 개수인 n을 입력 받고 n개의 그림들 중 차이가 가장 적은 두 개의 그림을 찾아 해당 그림의 번호들을 작은 순서로 출력하는 문제입니다.

그림의 개수인 n은 최대 50이고 그림의 크기도 5 * 7 이므로 완전 탐색을 하여 모든 인덱스를 직접 확인해보고 차이가 가장 적은 두 그림의 번로를 찾도록 구현하였습니다.

정답 코드

fun main() {

    var paintingCnt = readln().toInt()
    val paintingList = mutableListOf<MutableList<MutableList<Char>>>()

    var minDiffCnt = 36
    val diffNumList = IntArray(2, { 0 })
    
    repeat(paintingCnt) {

        val curList = mutableListOf<MutableList<Char>>()

        for (line in 0 until 5) {
            var curLine = readln().toMutableList()
            curList.add(curLine)
        }
        paintingList.add(curList)
    }

    for (i in 0 until paintingCnt) {
        for (j in i + 1 until paintingCnt) {
            val curDiffCnt = diffCnt(paintingList[i], paintingList[j])
            if (curDiffCnt < minDiffCnt) {
                minDiffCnt = curDiffCnt
                diffNumList[0] = i + 1
                diffNumList[1] = j + 1
            }
        }
    }

    diffNumList.forEach {
        print("$it ")
    }

}

fun diffCnt(firPainting: MutableList<MutableList<Char>>, secPainting: MutableList<MutableList<Char>>): Int {
    var diffCnt = 0
    for (i in 0 until 5) {
        for (j in 0 until 7) {
            if (firPainting[i][j] != secPainting[i][j]) diffCnt++
        }
    }
    return diffCnt
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기