본문 바로가기
Algorithm/📖Baekjoon

#20125 쿠키의 신체 측정

by yewoneeee 2024. 7. 29.

문제


 

코드


fun main() = with(System.`in`.bufferedReader()) {
    val n = readLine().toInt()
    val cookie = Array(n) { BooleanArray(n) }
    var heart = Pair(0, 0)
    var lArm = 0; var rArm = 0; var waist = 0 ; var lLeg = 0 ; var rLeg = 0
    for (i in 0..<n) {
        cookie[i] = readLine().map { if (it == '*') true else false }.toBooleanArray()
    }
    // 심장 위치 구하기
    findHeartPos@ for (i in cookie.indices) {
        for (j in cookie[i].indices) {
            if (cookie[i][j]) {
                heart = Pair(i + 1, j)
                break@findHeartPos
            }
        }
    }
    for (i in 0..<heart.second) {
        if (cookie[heart.first][i]) lArm++
    }
    for (i in heart.second + 1..<n) {
        if (cookie[heart.first][i]) rArm++
    }
    for (i in heart.first + 1..<n) {
        if (cookie[i][heart.second]) waist++
    }
    for (i in heart.first + waist + 1..<n) {
        if (cookie[i][heart.second - 1]) lLeg++
        if (cookie[i][heart.second + 1]) rLeg++
    }
    println("${heart.first + 1} ${heart.second + 1}")
    println("$lArm $rArm $waist $lLeg $rLeg")
}

 

풀이


처음에 dfs쓰는 문젠줄 알았다

근데 그냥 단순하게 구현하면 될 것 같았다

 


구현하다가 중첩 반복문을 중단하는 법에 대해 배웠다

여러 가지 방법이 있는데

 

1. 종료 여부 확인용 변수 생성

var exit = false
for(i in 0..2) {
    for (j in 0..2) {
        if (i == j) exit = true
        if(exit) break
    }
    if(exit) break
}

이런 식으로 작성해도 되지만, 코드가 지저분해지고 가독성도 떨어진다

그리고 종료 여부를 확인하는 용도로 변수를 따로 선언하고 싶지 않았다..ㅎㅎ

 

2. 라벨 사용

findHeartPos@ for (i in cookie.indices) {
    for (j in cookie[i].indices) {
        if (cookie[i][j]) {
            heart = Pair(i + 1, j)
            break@findHeartPos
        }
    }
}

 

이런 식으로 라벨을 붙여주고, 해당 라벨을 통해 어떤 반복문을 종료할지 지정할 수 있다

라벨을 붙여줄 땐, 라벨명@

라벨을 사용할 땐, @라벨명

이런 식이다.

 

사용이 간단하고, 라벨명을 통해 어떤 문장을 종료할 지 코드 상으로 쉽게 예측이 가능하기 때문에 좋은 방법같다!

 


 

다시 문제 풀이로 돌아오자면,

쿠키 판을 왼쪽 상단부터 오른쪽 하단 순으로 탐색했을 때 가장 처음으로 찾은 쿠키의 몸이 쿠키의 머리가 된다.

가장 위쪽에 한 칸만 위치하기 때문

심장은 머리 바로 아래에 있기 때문에, 이것을 이용하여 심장의 위치를 찾는다

 

그 다음 심장을 기준으로, 몸 길이를 측정하면 된다

 

'Algorithm > 📖Baekjoon' 카테고리의 다른 글

#2504 괄호의 값  (0) 2024.08.07
#1978 소수 찾기  (0) 2024.08.06
#7568 덩치  (0) 2024.07.26
#8979 올림픽  (0) 2024.07.26
#9655 돌 게임  (0) 2024.07.25

댓글