알고리즘 문제풀이/프로그래머스

[프로그래머스/Level 1] 바탕화면 정리

노력의천재 2024. 1. 2. 22:56

https://school.programmers.co.kr/learn/courses/30/lessons/161990

 

프로그래머스

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

programmers.co.kr

 

최소한의 이동거리를 갖는 한 번의 드래그로 모든 파일을 선택하기 위해선 규칙이 존재하는데,

각 파일의 x좌표와 y좌표의 최소값, 최대값을 찾은 후 시작점은 최소값들의 좌표로 구성하고, 끝점은 최대값들의 좌표로 구성한 후 각각 +1을 해주면 된다.

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

vector<int> solution(vector<string> wallpaper) {
    vector<int> xPos, yPos;
    
    for (int i = 0; i < wallpaper.size(); i++) {
        for (int j = 0; j < wallpaper[i].size(); j++) {
            if (wallpaper[i][j] == '#') {
                xPos.push_back(i);
                yPos.push_back(j);
            }
        }
    }
    
    int xMin = *min_element(xPos.begin(), xPos.end());
    int yMin = *min_element(yPos.begin(), yPos.end());
    int xMax = *max_element(xPos.begin(), xPos.end());
    int yMax = *max_element(yPos.begin(), yPos.end());
    
    return {xMin, yMin, xMax + 1, yMax + 1};
}