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

[프로그래머스] 거리두기 확인하기

쪼르뚜 2024. 10. 9. 01:21
728x90
반응형


🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr


반응형
728x90

👩‍💻 코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<vector<string>> places) {
    vector<int> answer;
    int dx[4] = {0, 0, 1, -1};
    int dy[4] = {1, -1, 0, 0};
    
    for(vector<string> place : places){
        bool isFind = false;
        
        for(int i=0; i<5; i++){
            for(int j=0; j<5; j++){
                if(place[i][j] == 'P'){
                    for(int k=0; k<4; k++){
                        int x = i + dx[k];
                        int y = j + dy[k];
                        
                        if(x >= 0 && x < 5 && y >= 0 && y < 5 && place[x][y] == 'P'){
                            answer.push_back(0);
                            isFind = true;
                            break;
                        }
                    }
                }
                
                if(place[i][j] == 'O'){
                    int count = 0;
                    for(int k=0; k<4; k++){
                        int x = i + dx[k];
                        int y = j + dy[k];

                        if(x >= 0 && x < 5 && y >= 0 && y < 5){
                            if(place[x][y] == 'P'){
                                count++;
                            }
                        }

                        if (count >= 2) {
                            answer.push_back(0);
                            isFind = true;
                            break;
                        }
                    }
                }
                
                if(isFind){
                    break;
                }
            }
            
            if(isFind){
                break;
            }
        }
        
        if (!isFind) {
            answer.push_back(1);
        }
    }
    
    return answer;
}

📝 풀이

응시자(P)가 있다면 응시자(P)의 상하좌우를 확인하여 응시자(P)가 있는지 확인합니다.

응시자(P)의 상하좌우에 다른 응시자(P)가 있다면 answer에 0을 push하고 isFind를 true로 바꾸고 break 합니다.

빈자리(O)가 있다면 빈자리(O)의 상하좌우에 응시자(P)가 2명 이상 있는지 확인합니다.

빈자리(O)의 상하좌우에 응시자(P)가 2명 이상이라면 answer에 0을 push하고 isFind를 true로 바꾸고 break 합니다.

반복문을 모두 마치면 최종적으로 answer을 return 합니다.

728x90
반응형