반응형
https://school.programmers.co.kr/learn/courses/30/lessons/49994
풀이
사실 책에서 풀이보고 풀었다.
처음에는 방문 여부를 boolean[][] 배열에 저장한 후, 방문 노드를 체크하는 식으로 했었는데, 같은 노드에 도착하더라도 출발 노드에 따라 총 4가지 경우의 수(동서남북)가 나올 수 있다는 걸 풀이보고 깨달았다...... 간선으로 접근했어야 했는데.
책에서는 Set을 문자열로 출발좌표->도착좌표로 공백으로 구분해뒀지만, 나중에 고쳐본다면 따로 Edge 클래스를 만들어서 equals, hashcode 부분을 수정해서 만들어보면 더욱 객체지향적으로 풀 수 있을 것 같다.
set에 넣는 과정에서 무방향 간선이라 출발->도착, 도착->출발의 두 경우를 모두 넣기 때문에, 리턴할 때는 2로 나누어주었다.
dirMap은 Map.of(...)를 통해서 초기화를 바로 해주었는데, ... 부분은 ,을 기준으로 키와 벨류를 순서대로 써주면 된다.
책 풀이지만, 막 now[0], now[1] 이런 식으로 하는 건 되게 안 좋아해서 이것도 나중에 다시 풀게 된다면 고쳐보는 걸로,,
전체 코드
import java.util.*;
class Solution {
public int solution(String dirs) {
Set<String> ans = new HashSet<>();
Map<Character, int[]> dirMap = Map.of(
'U', new int[]{1, 0},
'R', new int[]{0, 1},
'D', new int[]{-1, 0},
'L', new int[]{0, -1}
);
int[] now = {5, 5};
for (char ch : dirs.toCharArray()) {
int[] dir = dirMap.get(ch);
int nx = now[0] + dir[0];
int ny = now[1] + dir[1];
if ((0 <= nx && nx < 11) && (0 <= ny && ny < 11)) {
ans.add(now[0]+" "+now[1]+" "+nx+" "+ny);
ans.add(nx+" "+ny+" "+now[0]+" "+now[1]);
now[0] = nx;
now[1] = ny;
}
}
return ans.size() / 2;
}
}
반응형
'알고리즘 🤔' 카테고리의 다른 글
[백준 자바 2179] 비슷한 단어 (골드 4) (0) | 2024.05.21 |
---|---|
[프로그래머스 자바] 베스트앨범 (Lv.3) (0) | 2024.05.20 |
[백준 자바 1747] 소수&팰린드롬 (실버 1) (0) | 2024.04.03 |
[백준 자바 1182] 부분수열의 합 (실버 2) (0) | 2024.03.08 |
[백준 자바 14889] 스타트와 링크 (실버 1) (1) | 2024.02.27 |