일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- 프로그래머스
- gradle
- 2020 KAKAO BLIND RECRUITMENT
- c++
- 알고리즘
- Java
- 2019 KAKAO BLIND RECRUITMENT
- 백준
- 2018 카카오 공채
- 2020 카카오 공채
- 2018 KAKAO BLIND RECRUITMENT
- bfs
- 2018 KAKAO BLIND RECRUITMENT 1차
- 삼성 SW 기출문제
- 카카오 공채
- 2019 카카오 공채
- 비트마스크
- 부스트코스
- 카카오
- 삼성 SW 역량테스트
- dfs
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- Baekjoon
- set
- 젠킨스
- map
- CS 스터디
- gcp
- 2018 카카오
Archives
- Today
- Total
아무코딩
[Summer/Winter Coding(~2018)] 방문 길이 (java) 본문
문제풀이
set 을 이용 하는 데 많은 공부가 되었던 문제이다.
원래 4차원 배열을 이용하여 저장해도 됐지만 set을 사용하고 싶어 사용하다가 자연스레 하나 배워간 문제이다.
먼저, set을 사용할때 key가 객체일경우 객체안의 값이아니라 객체자체를 비교하게 된다 그래서 같은객체가 아니라면 값이 같아도 다르게 판단한다.
그래서 hashcode를 오버라이딩하여 수정 할 필요가있다. 객체안의 값이 같은경우 같은 해시코드를 반환하게 해주면 객체 값을 가지고 비교할 수 있다.
그리고 문제풀 때 주의할점이 방향성이 없는 선이라서 나같은 경우에는 양방향으로 set에 다추가해준 뒤 /2 를 통해 길의 개수를 판단해 주었다.
소스코드
더보기
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
import java.util.HashSet;
import java.util.Set;
public class Programmers49994 {
static Set<Path> pathSet = new HashSet<>();
static int dirRow[] = {-1,0,0,1};
static int dirCol[] = {0,-1,1,0};
public static int solution(String dirs) {
int answer = 0;
int x = 0;
int y = 0;
Path path1 = null;
Path path2 = null;
for(int i=0;i<dirs.length();i++){
int dir = getDir(dirs.charAt(i));
int nextX = x + dirRow[dir];
int nextY = y + dirCol[dir];
if(!isRange(nextX, nextY))
continue;
path1 = new Path(x,y,nextX,nextY);
path2 = new Path(nextX,nextY,x,y);
x = nextX;
y = nextY;
if(!pathSet.contains(path1)){
pathSet.add(path1);
pathSet.add(path2);
}
}
answer = pathSet.size()/2;
return answer;
}
public static boolean isRange(int nextX, int nextY) {
return nextX>=-5&&nextY>=-5 && nextX<=5 &&nextY<=5;
}
private static int getDir(char c) {
switch (c){
case 'U':
return 0;
case 'L':
return 1;
case 'R':
return 2;
case 'D':
return 3;
default:
return -1;
}
}
static class Path {
int curX,curY,nextX,nextY;
public Path(int curX, int curY, int nextX, int nextY) {
this.curX = curX;
this.curY = curY;
this.nextX = nextX;
this.nextY = nextY;
}
public void setReverse(){
int tempX = curX;
int tempY = curY;
curX = nextX;
curY = nextY;
nextX = tempX;
nextY = tempY;
}
public int getCurX() {
return curX;
}
public int getCurY() {
return curY;
}
public int getNextX() {
return nextX;
}
public int getNextY() {
return nextY;
}
@Override
public int hashCode() {
return Integer.toString(curX).hashCode()+ Integer.toString(curY).hashCode() + Integer.toString(nextX).hashCode()+ Integer.toString(nextY).hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Path){
Path path = (Path) obj;
return path.getCurX()==curX && path.getCurY() ==curY && path.getNextX() ==nextX && path.getNextY()==nextY;
}
return false;
}
}
public static void main(String[] args) {
String dirs = "ULURRDLLU";
int result = solution(dirs);
System.out.println(result);
}
}
|
cs |
문제 링크 : programmers.co.kr/learn/courses/30/lessons/49994
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2019 KAKAO BLIND RECRUITMENT] 길찾기 게임 (1) | 2020.09.11 |
---|---|
[Summer/Winter Coding(~2018)] 스킬트리 (java) (0) | 2020.05.30 |
[프로그래머스] 줄 서는 방법 (0) | 2020.05.14 |
[2020 KAKAO BLIND RECRUITMENT] 가사 검색 (0) | 2020.05.08 |
[2019 KAKAO BLIND RECRUITMENT] 무지의 먹방 라이브 (0) | 2020.05.08 |
Comments