01-07 02:28
Recent Posts
Recent Comments
Tags
- Naver Cloud
- ์๋ฐ
- mysql
- ์๋์ด๋ ธ
- linux
- ํ์ด์ฌ
- API MarketPlace ๊ธ๋ก๋ฒ ์ํฌํฐ์ฆ
- ํ๋ก๋ณด๋ ธ
- Spring
- ์คํฝ์ค๋น
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- DB
- RaspberryPi
- TSQL
- ICT
- ์ด๋ธ์
- ict๊ณต๋ชจ์
- Java
- ์จ์ผ๋ํ
- JOBํ๊ณ
- ํ์ด์๊ณต๋ชจ์
- DATABASE
- ICT๋ฉํ ๋ง
- python
- ์คํฝ๋ ํ
- appetizer
- SQL
- API๋ง์ผํ๋ ์ด์ค
- ํ์ด์
- ์กํ๊ณ
- Today
- Total
miinsun
[Programmers] 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ : ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ JAVA ๋ณธ๋ฌธ
Algorithm/Programmers
[Programmers] 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ : ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ JAVA
miinsun 2022. 7. 1. 21:16
๐ฌ ๋ฌธ์ ์ค๋ช
๊ฐ๋ฐ์๋ฅผ ํฌ๋งํ๋ ์ฃ ๋ฅด๋๊ฐ ์นด์นด์ค์ ๋ฉด์ ์ ๋ณด๋ฌ ์์ต๋๋ค.์ฝ๋ก๋ ๋ฐ์ด๋ฌ์ค ๊ฐ์ผ ์๋ฐฉ์ ์ํด ์์์๋ค์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌ์ ๋๊ธฐ๋ฅผ ํด์ผํ๋๋ฐ ๊ฐ๋ฐ ์ง๊ตฐ ๋ฉด์ ์ธ ๋งํผ์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ๋๊ธฐ์ค์ ๊ฑฐ๋ฆฌ๋ฅผ ๋๊ณ ์๋๋ก ์๋ดํ๊ณ ์์ต๋๋ค.
๋๊ธฐ์ค์ 5๊ฐ์ด๋ฉฐ, ๊ฐ ๋๊ธฐ์ค์ 5x5 ํฌ๊ธฐ์ ๋๋ค.๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์ํ์ฌ ์์์๋ค ๋ผ๋ฆฌ๋ ๋งจํดํผ ๊ฑฐ๋ฆฌ1๊ฐ 2 ์ดํ๋ก ์์ง ๋ง์ ์ฃผ์ธ์.๋จ ์์์๊ฐ ์์์๋ ์๋ฆฌ ์ฌ์ด๊ฐ ํํฐ์ ์ผ๋ก ๋งํ ์์ ๊ฒฝ์ฐ์๋ ํ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด,
5๊ฐ์ ๋๊ธฐ์ค์ ๋ณธ ์ฃ ๋ฅด๋๋ ๊ฐ ๋๊ธฐ์ค์์ ์์์๋ค์ด ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์ ๊ธฐํค๊ณ ์๋์ง ์๊ณ ์ถ์ด์ก์ต๋๋ค. ์๋ฆฌ์ ์์์๋ ์์์๋ค์ ์ ๋ณด์ ๋๊ธฐ์ค ๊ตฌ์กฐ๋ฅผ ๋๊ธฐ์ค๋ณ๋ก ๋ด์ 2์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด places๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค.
๊ฐ ๋๊ธฐ์ค๋ณ๋ก ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ผ๋ฉด 1์, ํ ๋ช ์ด๋ผ๋ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋กsolution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๐ซ ์ ํ ์ฌํญ
- places์ ํ ๊ธธ์ด(๋๊ธฐ์ค ๊ฐ์) = 5
- places์ ๊ฐ ํ์ ํ๋์ ๋๊ธฐ์ค ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค.
- places์ ์ด ๊ธธ์ด(๋๊ธฐ์ค ์ธ๋ก ๊ธธ์ด) = 5
- places์ ์์๋ P,O,X๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์
๋๋ค.
- places ์์์ ๊ธธ์ด(๋๊ธฐ์ค ๊ฐ๋ก ๊ธธ์ด) = 5
- P๋ ์์์๊ฐ ์์์๋ ์๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
- O๋ ๋น ํ ์ด๋ธ์ ์๋ฏธํฉ๋๋ค.
- X๋ ํํฐ์ ์ ์๋ฏธํฉ๋๋ค.
- ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ 5๊ฐ ๋๊ธฐ์ค์ ํฌ๊ธฐ๋ ๋ชจ๋ 5x5 ์ ๋๋ค.
- return ๊ฐ ํ์
- 1์ฐจ์ ์ ์ ๋ฐฐ์ด์ 5๊ฐ์ ์์๋ฅผ ๋ด์์ return ํฉ๋๋ค.
- places์ ๋ด๊ฒจ ์๋ 5๊ฐ ๋๊ธฐ์ค์ ์์๋๋ก, ๊ฑฐ๋ฆฌ๋๊ธฐ ์ค์ ์ฌ๋ถ๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์ต๋๋ค.
- ๊ฐ ๋๊ธฐ์ค ๋ณ๋ก ๋ชจ๋ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ผ๋ฉด 1์, ํ ๋ช ์ด๋ผ๋ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0์ ๋ด์ต๋๋ค.
๐จ ์ ์ถ๋ ฅ ์
- ์ ์ถ๋ ฅ ์
- ๋ชจ๋ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ต๋๋ค.
- (0, 0) ์๋ฆฌ์ ์์์์ (2, 0) ์๋ฆฌ์ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ง ์์ต๋๋ค.
- (1, 2) ์๋ฆฌ์ ์์์์ (0, 3) ์๋ฆฌ์ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ง ์์ต๋๋ค.
- (4, 3) ์๋ฆฌ์ ์์์์ (4, 4) ์๋ฆฌ์ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ง ์์ต๋๋ค.
- ๋ชจ๋ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ต๋๋ค.
- ๋๊ธฐ์ค์ ์์์๊ฐ ์์ผ๋ฏ๋ก ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ต๋๋ค.
- ๋ชจ๋ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ต๋๋ค.
๋ ๋ฒ์งธ ๋๊ธฐ์ค์ ์ ์ธํ ๋ชจ๋ ๋๊ธฐ์ค์์ ๊ฑฐ๋ฆฌ๋๊ธฐ๊ฐ ์ง์ผ์ง๊ณ ์์ผ๋ฏ๋ก, ๋ฐฐ์ด [1, 0, 1, 1, 1]์ return ํฉ๋๋ค.
๐ป Solution.java
- ์ขํ ์ ๋ณด์ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ์ ์ฅํ ํด๋์ค Point๋ฅผ ์์ฑํ๋ค
- isKeepDistance() ํจ์๋ก ํ ๋๊ธฐ์ค์ฉ ๊ฑฐ๋ฆฌ๋๊ธฐ๊ฐ ์ ๋๋ก ๋๊ณ ์๋์ง ํ์ธํ๋ค.
- ์์์์ ์์น๋ฅผ ์ฐพ์ bfs๋ฅผ ์์ํ๋ค.
- ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด์ bfs ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
- ์์์ ์์น๋ฅผ ์์์ผ๋ก ์ขํ๋ฅผ ์ ์ฅํ๋ค
- ๋งจํดํผ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์ ๋ค์์ผ๋ก ๊ฐ ์ขํ๋ ์ญ์๋ก๋ง ์์ง์ด๊ณ , ๊ฑฐ๋ฆฌ๋ฅผ point.dist์ ์ ์ฅํ๋ค
- ์์์์ ๋จ์ด์ง ๊ฑฐ๋ฆฌ(point.dist + 1)๊ฐ 2๋ณด๋ค ์ปค์ง๊ฒ ๋๋ฉด bfs๋ฅผ ์ค์งํ๋ค
- ํํฐ์ ์ ์ ํ๋ฉด ์คํต
- ๋งจํดํผ ๊ฑฐ๋ฆฌ 2์ดํ์ ๋ค๋ฅธ ์์์๋ฅผ ๋ง๋๋ฉด bfs ์ค์ง, 0๋ฆฌํด
import java.util.*;
class Point{
int x;
int y;
int dist;
Point(int x, int y, int dist){
this.x = x;
this.y = y;
this.dist = dist;
}
}
class Solution {
static int[] dy = {-1,0,1,0};
static int[] dx = {0,1,0,-1};
public int bfs(int x, int y, String[] place){
boolean[][] visited = new boolean[5][5];
Queue<Point> q = new LinkedList<>();
q.add(new Point(x, y, 0)); // ์์์ ์์น๋ฅผ ์์์ ์ผ๋ก ์ง์
while(!q.isEmpty()){
Point cur = q.poll();
visited[x][y] = true;
for(int k = 0; k < 4; k++){
int ny = cur.y + dy[k];
int nx = cur.x + dx[k];
// ์์์์ ๋ค์ ๊ฑฐ๋ฆฌ๊ฐ 2๋ณด๋ค ํด ๊ฒฝ์ฐ ์ ์ง
if(cur.dist + 1 > 2)
break;
// ๋๊ธฐ์ค์ ๋ฒ์ ๊ฒ์ฌ์ ์ค๋ณต ๊ฒ์ฌ
if(nx < 5 && ny < 5 && nx >= 0 && ny >= 0 && !visited[nx][ny]){
// ํํฐ์
์ผ ์๋ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ฌ์ง ์๋๋ค
if(place[nx].charAt(ny) == 'X')
continue;
// ๊ฑฐ๋ฆฌ๋๊ธฐ๊ฐ ์ด๋ค์ง์ง ์์ผ๋ฉด '0'๋ฆฌํด
else if(place[nx].charAt(ny) == 'P')
return 0;
// ๋น ํ
์ด๋ธ์ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ฌ์ค๋ค
else
q.add(new Point(nx, ny, cur.dist + 1));
}
}
}
return 1;
}
public int isKeepDistance(String[] place){
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
// ์์์๋ฅผ ์ค์ฌ์ผ๋ก bfs ์์
if(place[i].charAt(j) == 'P'){
// ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0 ๋ฆฌํด
if(bfs(i, j, place) == 0){
return 0;
}
}
}
}
// ๋ชจ๋ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ํ๊ณ ์์ผ๋ฉด 1 ๋ฆฌํด
return 1;
}
public int[] solution(String[][] places) {
int[] answer = new int[5];
for(int i = 0; i < 5; i++){
answer[i] = isKeepDistance(places[i]);
}
return answer;
}
}
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง : ์ต์์ง์ฌ๊ฐํ JAVA (0) | 2022.07.08 |
---|---|
[Programmers] ์คํ/ํ : ์ฃผ์๊ฐ๊ฒฉ JAVA (0) | 2022.07.05 |
[Programmers] 2022 KAKAO BLIND RECRUITMENT : ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ JAVA (0) | 2022.06.17 |
[Programmers] ๋ค์ ํฐ ์ซ์ - JAVA (๋ฌธ์์ด ์ฒ๋ฆฌ) (0) | 2022.05.20 |
[Programmers] ๋ ๋ฐ๋จน๊ธฐ - JAVA (Dynamic Programming) (0) | 2022.05.19 |
Comments