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()
}
}
반응형