Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- EOF
- binarysearch
- 관계형 데이터베이스
- 다이나믹프로그래밍
- 백준
- quickDBD
- greedy
- ERD 설계
- Python
- 이것이 취업을 위한 코딩 테스트다
- 알고리즘
- 그리디
- ERD Tool
- 탑다운
- 순차탐색
- DynamicProgramming
- MySQL
- Top-down
- 라이징캠프
- 탐색
- binary_search
- 소프트스퀘어드
- 보텀업
- 작동순서
- java
- 플로이드워셜
- 퀵 정렬 # quciksort # 정렬
- charAt
- Algorithm
- hasNext
Archives
- Today
- Total
Seok_In
[프로그래머스] 거리두기 확인하기 본문
문제
접근방법
1. 제한사항이 결국 5 * 5 대기실이 5개가 있기때문에 브루트포스로 접근하여 문제를 해결하기로 했다.
2. 기본적으로 참가자들을 모두 담을 자료구조가 필요했기때문에 간단히 큐를 생각해서 참가자들의 자리를 배열로 넣었다.
3. 큐에서 꺼낸 참가자의 4방을 모두 탐색한다.
3-1. 파티션인 경우 해당사항이 없으니 넘어간다.
3-2. 다른 참가자인 경우 False
3-3. 빈자리인 경우 한 번더 4방 탐색을 진행한다. 이 때 기존에 시작했던 참가자의 자리는 탐색하면 안되기에 체크해준다.
3-4. 4방 탐색시 다른 참가자인 경우 False
코드
import java.util.*;
class Solution {
static int dx[] = {1,-1,0,0};
static int dy[] = {0,0,1,-1};
public int[] solution(String[][] places) {
int[] answer = new int[5];
int num = 0;
for(String[] place : places){
String map[][] = new String[5][5];
Queue<int[]> q = new LinkedList<>();
for(int i=0;i<5;i++){
String str[] = place[i].split("");
for(int j=0;j<5;j++){
map[i][j] = str[j];
if(str[j].equals("P")){
q.add(new int[]{i,j});
}
}
}
boolean t = true;
while(!q.isEmpty()){
int arr[] = q.poll();
int xPos = arr[0];
int yPos = arr[1];
// 1차 사방탐색(맨해튼 거리 = 1)
for(int i=0;i<4;i++){
int nx = xPos + dx[i];
int ny = yPos + dy[i];
// 범위를 초과한 경우 해당되지 않음
if(nx < 0 || ny <0 || nx >4 || ny> 4) continue;
// 파티션인 경우 해당되지 않음
if(map[nx][ny].equals("X")) continue;
// 사람인 경우 끝
else if(map[nx][ny].equals("P")) {
t = false;
break;
}
// 빈자리인 경우 그 전 자리의 사람을 빼고 탐색해야함
else if(map[nx][ny].equals("O")){
for(int j=0;j<4;j++){
int nnx = nx + dx[j];
int nny = ny + dy[j];
// 범위를 초과한 경우 해당되지 않음
if(nnx < 0 || nny <0 || nnx >4 || nny> 4) continue;
// 기존 탐색 시작했던 자리는 빼고 탐색
if(nnx == xPos && nny ==yPos) continue;
else if(map[nnx][nny].equals("P")){
t = false;
break;
}
}
}
}
}
if(t){
answer[num] = 1;
}
num+=1;
}
return answer;
}
}
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 괄호 회전하기 (0) | 2023.07.10 |
---|---|
[Algorithm] 백준 B1202 보석도둑 JAVA (0) | 2022.10.19 |