반응형
https://leetcode.com/problems/robot-return-to-origin/
1. 2022.01.27 시도
소요시간: 11분(3분 구상, 8분 코딩), 3분
class Solution {
public boolean judgeCircle(String moves) {
Map<Character, Long> map = new HashMap<>();
map.put('U', 100000L);
map.put('D', -100000L);
map.put('L', 1L);
map.put('R', -1L);
long ret = 0;
for(int i=0; i<moves.length(); i++) {
char target = moves.charAt(i);
ret += map.get(target);
}
return ret == 0 ? true : false;
}
}
class Solution {
public boolean judgeCircle(String moves) {
int up = 0;
int down = 0;
int left = 0;
int right = 0;
for(int i=0; i<moves.length(); i++) {
char target = moves.charAt(i);
switch(target) {
case 'U':
up++;
break;
case 'D':
down++;
break;
case 'L':
left++;
break;
case 'R':
right++;
break;
}
}
return (up == down) && (left == right);
}
}
풀이 접근 과정
문제를 보고는 방향에 대해 생각해서 어레이로 접근해야하나 싶었다. 그런데 문제의 핵심은 원점으로 돌아왔는지 였기에 LR은 서로 상쇄되고 UD도 서로 상쇄되기때문에 다 합치면 0이면 되겠다 싶었다.
0을 만드는 방법은 무궁무진한데 아이디어를 써서 double형태로 접근했다. 범위가 최대 20000개가 가능하니 Left는 1, Right는 -1과 같이 정수로 매기고, Up은 0.00001, Down은 -0.00001로 했다. 그런데 여기에 문제가 있다. double형으로 계산하다보니 계산값이 이상해진다는 것이다. 그래서 다시 long으로 고쳐 Left는 1, Right는 -1로 하고 Up은 100000, Down은 -100000으로 해서 풀었다.
사실 이보다 더 간단하게 해결할 수 있다 각자 변수를 할당하고 카운트해서 숫자가 같은지 보는 것이다. 2번째 풀이로 풀었다.
느낀점
- 이번 문제는 LR, UD를 독립적으로 어떻게 카운트할 것인지에 대한 문제였다.
- double형은 계산식에 되도록 쓰지 말아야겠다는 생각을 했다.
알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)
반응형
'알고리즘 풀이' 카테고리의 다른 글
.leetcode(11. Container With Most Water) (0) | 2022.01.30 |
---|---|
.leetcode(841. Keys and Rooms) (0) | 2022.01.30 |
.leetcode(876. Middle of the Linked List) (0) | 2022.01.24 |
.leetcode(125. Valid Palindrome) (0) | 2022.01.24 |
.leetcode(344. Reverse String) (0) | 2022.01.24 |