티스토리 뷰
문제
https://programmers.co.kr/learn/courses/30/lessons/81302
코딩테스트 연습 - 거리두기 확인하기
[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]
programmers.co.kr
풀이
1. 5개의 대기실마다 검사를 해야하므로 하나의 대기실에 대해 검사하는 함수를 만들어 각 대기실마다 거리두기를 만족하는지 여부를 체크할 수 있습니다.
2. P의 주변을 확인할 때, 거리가 2이하이므로 총 12가지 인접위치를 하나 하나 검사해도 되고, bfs 혹은 dfs로 구현해도 됩니다. (아래의 코드에서는 bfs를 사용하였습니다.)
코드
#include <bits/stdc++.h>
using namespace std;
const int dir[4][2] = {{-1,0}, {1,0}, {0, -1}, {0, 1}};
bool check(string g[]){
bool ret = 1, vis[5][5];
auto bfs = [&](int r, int c) -> bool{
memset(vis, 0, sizeof(vis));
queue<tuple<int,int,int>> q;
int cr, cc, nr, nc, d;
q.push({r, c, 0});
vis[r][c] = 1;
while(!q.empty()){
tie(cr, cc, d) = q.front(); q.pop();
if (d <= 2 && !(cr == r && cc == c) && g[cr][cc] == 'P') return 0;
for (int i = 0 ; i < 4; i++){
nr = cr + dir[i][0], nc = cc + dir[i][1];
if (nr < 0 || nr >= 5 || nc < 0 || nc >= 5 || g[nr][nc] == 'X') continue;
if (d <= 1) {
q.push({nr,nc,d+1});
vis[nr][nc] = 1;
}
}
}
return 1;
};
for (int i = 0; i < 5; i++)
for (int j = 0 ; j < 5; j++)
if (g[i][j] == 'P')
ret &= bfs(i, j);
return ret;
}
vector<int> solution(vector<vector<string>> places) {
vector<int> answer;
for (auto g : places){
string grid[5];
for (int i = 0 ; i < 5; i++) grid[i] = g[i];
answer.push_back(check(grid));
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스 위클리 챌린지 3주차] 퍼즐 조각 채우기 (0) | 2021.08.17 |
---|---|
[프로그래머스 2021 카카오 채용연계형 인턴십] 표 편집 (0) | 2021.07.10 |
[프로그래머스 2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어 (0) | 2021.07.10 |
[프로그래머스 월간 코드 챌린지 시즌2] 모두 0으로 만들기 (0) | 2021.04.16 |
[프로그래머스 월간 코드 챌린지 시즌2] 괄호 회전하기 (0) | 2021.04.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카카오 표 편집
- 이분탐색
- 시뮬레이션
- 카카오 2020 인턴십
- 프로그래머스 위클리 9주차
- 2022 KAKAO BLIND RECRUITMENT
- 트리
- 2021 KAKAO BLIND
- 누적합
- 2021 카카오 블라인드
- 프로그래머스 월간코드챌린지
- DP
- 유니온파인드
- 표 편집
- 동적계획법
- 2022 카카오블라인드
- 구현
- 카카오 2021
- 투포인터
- 2020 KAKAO BLIND RECRUITMENT
- 파싱
- 카카오 2차코딩테스트
- 백준
- 프로그래머스
- 게임이론
- 위클리 챌린지
- Kakaoblind
- 2022 카카오 블라인드 코딩테스트
- BFS
- 카카오 인턴십
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함