상세 컨텐츠

본문 제목

프로그래머스 바탕화면 정리

cote/Intermediate

by geminanolja 2025. 4. 3. 07:53

본문

https://school.programmers.co.kr/learn/courses/30/lessons/161990?language=cpp

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

  • 컴퓨터 바탕화면이 2차원 문자열 배열 wallpaper로 주어짐.
  • "#"는 파일 아이콘이 있는 칸, "."은 빈 칸.
  • 한 번의 드래그로 모든 파일을 선택해야 함.
  • 드래그는 **왼쪽 위 점 S(lux, luy)**에서 **오른쪽 아래 점 E(rdx, rdy)**까지의 직사각형을 긋는 방식.
  • 모든 #이 포함되는 최소 사각형을 구해 [lux, luy, rdx, rdy] 형태로 반환해야 함.

✅ 조건

  • lux < rdx, luy < rdy 만족
  • 드래그 범위는 lux ≤ i < rdx, luy ≤ j < rdy인 직사각형
  • 거리 최소화: |rdx - lux| + |rdy - luy|를 최소로!

 

 

#include <vector>
#include <string>
#include <algorithm> // min, max 사용을 위해 필요
using namespace std;

vector<int> solution(vector<string> wallpaper)
{
    // 드래그 시작 좌표 (lux, luy), 끝 좌표 (rdx, rdy) 초기화
    // lux, luy는 가장 작은 값으로 시작
    // rdx, rdy는 가장 큰 값으로 시작
    int lux = 50, luy = 50; // 최대 크기 50 기준
    int rdx = 0, rdy = 0;

    // wallpaper 전체 순회
    for (int i = 0; i < wallpaper.size(); ++i)
    {
        for (int j = 0; j < wallpaper[i].size(); ++j)
        {
            // 파일이 존재하는 위치("#") 발견 시
            if (wallpaper[i][j] == '#')
            {
                // 가장 왼쪽 위 좌표 갱신
                lux = min(lux, i);
                luy = min(luy, j);

                // 가장 오른쪽 아래 좌표 갱신
                rdx = max(rdx, i + 1); // 드래그는 해당 좌표 포함이므로 +1
                rdy = max(rdy, j + 1); // 마찬가지로 +1
            }
        }
    }

    // 결과를 {lux, luy, rdx, rdy} 순서로 반환
    return {lux, luy, rdx, rdy};
}

'cote > Intermediate' 카테고리의 다른 글

백준 2559  (0) 2025.04.05
백준 //안전 영역  (0) 2025.04.04
소수 구하기//백준  (0) 2025.03.31
DFS 긍정왕 홍철이의 구걸 여행  (0) 2025.03.03
외판원 문제 (TSP, Traveling Salesman Problem)  (0) 2025.02.22

관련글 더보기