Google 태그 관리자 아이콘

알고리즘 풀이

.leetcode(657. Robot Return to Origin)

silvergoni 2022. 1. 27. 09:59
반응형

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(알고리즘 문제풀이 접근)

반응형