Deff_Dev

[프로그래머스] 바탕화면 정리 (C++) 본문

코딩테스트/프로그래머스

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

Deff_a 2024. 9. 5. 13:55

문제

 

프로그래머스

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

programmers.co.kr

풀이

이 문제는 상황에 맞게 정렬하여 풀이했다.

 

일단 pair<int, int> 벡터에 정리할 파일들의 좌표를 저장한다.

 

저장한 후, 드래그 시작 좌표와, 끝 좌표를 구한다.

 

 

드래그 시작

Y 좌표

→ Y축으로 오름차순 정렬 후,  0 번째 좌표의 Y값

X 좌표

→ X축으로 오름차순 정렬 후, 0 번째 좌표의 X값

 

드래그 끝

Y 좌표

→ Y축으로 내림차순 정렬 후,  0 번째 좌표의 Y + 1값

X 좌표

→ X축으로 내림차순 정렬 후, 0 번째 좌표의 X + 1값

 

순서대로 answer에 Push 해주고 Return

#include <string>
#include <vector>
#include<algorithm>

using namespace std;
bool cmp_HighY (pair<int,int> a, pair<int,int> b){
    return a.first > b.first;
}

bool cmp_HighX (pair<int,int> a, pair<int,int> b){
    return a.second > b.second;
}

bool cmp_LowX (pair<int,int> a, pair<int,int> b){
    return a.second < b.second;
}

vector<int> solution(vector<string> wallpaper) {
    vector<int> answer;
    vector <pair<int, int>> fileVec;
    
    for(int i = 0; i < wallpaper.size(); i++){
        for(int j = 0; j < wallpaper[i].length(); j++){
            if(wallpaper[i][j] == '#')
                fileVec.push_back({i, j});
        }
    }
    
    // 드래그 시작 좌표 구하기
    sort(fileVec.begin(), fileVec.end());
    answer.push_back(fileVec[0].first);
    sort(fileVec.begin(), fileVec.end(), cmp_LowX);
    answer.push_back(fileVec[0].second);

    // 드래그 종료 좌표 구하기
    sort(fileVec.begin(), fileVec.end(),cmp_HighY);
    answer.push_back(fileVec[0].first + 1);
    sort(fileVec.begin(), fileVec.end(), cmp_HighX);
    answer.push_back(fileVec[0].second + 1);

    return answer;
}