Algorithm/프로그래머스

[프로그래머스 > Lv1] 바탕화면 정리

RIEN😚 2023. 3. 4. 14:58
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제

컴퓨터 바탕화면의 상태를 나타낸 문자열 배열 wallpaper가 주어집니다.

빈칸은 ".", 파일이 있는 칸은 "#"의 값을 가집니다. 드래그를 하면 파일들을 선택할 수 있고, 선택된 파일들을 삭제할 수 있습니다.

 

최소한의 이동거리를 갖는 한 번의 드래그로 모든 파일을 선택해서 한 번에 지우려고 합니다.

 

[입력]

머쓱이의 컴퓨터 바탕화면의 상태를 나타내는 문자열 배열 wallpaper

 

[출력]

바탕화면의 파일들을 한 번에 삭제하기 위해 최소한의 이동거리를 갖는 드래그의 시작점과 끝점을 담은 정수 배열을 return

 

2. 풀이

바탕화면의 파일 상태가 아래와 같을 때

한번에 모든 파일을 담으려면 아래의 좌표를 구하면 됩니다.

🌹 [가장 왼쪽 파일의 x, 가장 위쪽 파일의 y] - [가장 오른쪽 파일의 x, 가장 아래쪽 파일의 y]

 

3. 코드

Kotlin
import java.lang.Integer.max
import kotlin.math.min

class Solution {
    fun solution(wallpaper: Array<String>): IntArray {
        val height = wallpaper.size
        val width = wallpaper.first().length

        var top = height
        var right = 0
        var bottom = 0
        var left = width

        for (x in 0 until height) {
            for (y in 0 until width) {
                if (wallpaper[x][y] == '#') {
                    top = min(top, x)
                    right = max(right, y + 1)
                    bottom = max(bottom, x + 1)
                    left = min(left, y)
                }
            }
        }
        return arrayOf(top, left, bottom, right).toIntArray()
    }
}

 

 

 

 

 

반응형