[C++] 프로그래머스 - 바탕화면 정리

김세희·2025년 6월 25일

✍️Today I Learned

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


문제 설명

프로그래머스 문제 링크
바탕화면은 (세로 좌표, 가로 좌표)로 표현하며 가장 왼쪽 위 (0, 0)부터 시작한다.
파일이 있는 칸을 #으로 표현할 때 바탕화면에 있는 모든 파일을 최단 거리로 드래그할 수 있는 시작 좌표(lux, luy)와 끝 좌표(rdx, rdy)를 정수 배열{lux, luy, rdx, rdy}에 넣어 반환하는 solution 함수를 작성해라.
제한사항

  • wallpaper의 모든 원소의 길이는 동일하다.
  • 1 ≤ wallpaper 길이 ≤ 50
  • 1 ≤ wallpaper[i] 길이 ≤ 50
  • wallpaper[i][j]는 '#'이나 '.'의 값만 가진다.
  • 바탕화면에는 적어도 하나의 파일이 있다.
  • 시작점의 좌표가 끝점의 좌표보다 작아야 한다.

👉예시
wallpaper = {".#...", "..#..", "...#."}
answer = {0, 1, 3, 4}

풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<string> wallpaper) {
    vector<int> answer;
    for(int i=0; i<wallpaper.size(); i++)
    {
        for(int j=0; j<wallpaper[i].size(); j++)
        {
            if(wallpaper[i][j] == '#')
            {
                // 파일 처음 찾았을 때
                if(answer.size()==0)
                {
                    answer.push_back(i);
                    answer.push_back(j);
                    answer.push_back(i+1);
                    answer.push_back(j+1);
                    continue;
                }
                // rdx 비교
                if(i + 1 > answer[2]) answer[2] = i + 1;
                // luy, rdy 
                if(j < answer[1]) answer[1] = j;
                else if (j + 1 > answer[3]) answer[3] = j + 1;
                
            }
                
        }
        
    }
    return answer;
}

코드 설명

  1. wallpaper[i][j]=='#' 일때 answer의 크기가 0이면 파일을 처음 찾은 것 이므로 answer에 {i, j, i+1, j+1}값을 넣는다.
  2. 드래그 시 끝점 좌표는 시작점 보다 적어도 1은 커야 하므로 끝점은 i+1, j+1로 한다.
  3. 시작점의 세로좌표는 초기화한 값보다 작을 수 없으므로 비교하지 않는다.
  4. 파일을 찾을 때마다 luy, rdx, rdy 값과 비교하여 값을 업데이트한다.

0개의 댓글