반응형
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
- 에러
- Singleton
- IOS
- 플러터
- dart
- linebreak
- 비동기 처리
- Lazy
- 프리즈드
- 자바
- element tree
- Android
- 알고리즘
- Kotlin
- 완전탐색
- 플러터 동작
- 재귀
- dfs
- 앱아이콘 변경
- flutter
- Widget Tree
- 싱글톤
- 자료구조
- 초기화
- 거리알고리즘
- Render object tree
- 코틀린
- zwj
- 프로그래머스
- Java
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
자바(JAVA) - 거리두기 확인하기(Programmers : 81302) 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/81302
다 됐다 싶었으니, 몇몇 실패 케이스 때문에 시간이조금 소요됐다. (디버깅이 상당히 어려웠다..)
나중에 보니 bfs 로 해결한 분들이 많던데, 나는 그냥 익숙하면서 아직 많이 부족한 dfs로 정답을 구했다.
각 P의 위치를 시작으로 dfs를 실행, 거리두기 조건에 충족하지 않을 경우 stopper 변수를 업데이트하고, 재귀 호출을 중단하는 식으로 정답을 구했다.
다 풀고 아쉬웠던 부분은 문제에서 주어진 내용들을 좀 더 활용했으면 더 좋았으련만,, 급한 마음에 너무 결과값에만 집착했다.
다음엔 더 꼼꼼히 읽고, 더 이해하기 쉬운 코드를 만들 수 있도록 노력, 또 노력해야겠다.
class Solution {
String[][] places;
int[] answer;
boolean goodToSit = true;
int len = 0;
boolean[][] visited;
public int[] solution(String[][] places) {
len = places.length;
int[] answer = new int[len];
visited = new boolean[len][len];
for (int i = 0; i < places.length; i++) {
// System.out.println("===============> "+ i);
for (int j = 0; j < places[i].length; j++) {
if (!goodToSit) break;
for (int k = 0; k < places[i][j].length(); k++) {
char currChar = places[i][j].charAt(k);
if (!goodToSit) break;
if (currChar == 'P') {
// System.out.println(" UPDATED P Location > "+ j + " / " + k);
dfs(places[i], j, k, 0);
visited = new boolean[len][len];
}
}
}
answer[i] = goodToSit ? 1 : 0;
goodToSit = true;
}
return answer;
}
public void dfs(String[] places, int r, int c, int distance) {
// System.out.println(r + " / " + c + " / " + distance);
if (!goodToSit) {
return;
}
if (r == len|| c == len || r < 0 || c < 0 || visited[r][c] || places[r].charAt(c) == 'X') {
// System.out.println("WRONG POSITION");
return;
}
if (distance != 0 && distance <= 2 && places[r].charAt(c) == 'P') {
// System.out.println("GoodToSit to FALSE");
goodToSit = false;
return;
}
if (!visited[r][c]) {
visited[r][c] = true;
dfs(places, r + 1, c, distance + 1);
dfs(places, r - 1, c, distance + 1);
dfs(places, r, c + 1, distance + 1);
dfs(places, r, c - 1, distance + 1);
visited[r][c] = false;
}
}
}
반응형
'Java > Java.algorithm' 카테고리의 다른 글
자바(JAVA) - 큰 수 만들기(Programmers : 42883) (0) | 2022.03.27 |
---|---|
자바(JAVA) - 튜플(Programmers : 64065) (0) | 2022.03.19 |
자바(JAVA) - 괄호 변환(Programmers : 12973) (0) | 2022.03.16 |
자바(JAVA) - 메뉴 리뉴얼(Programmers : 72411) (0) | 2022.03.15 |
자바(JAVA) - 단체사진 찍기(Programmers : 1835) (0) | 2022.03.13 |
Comments