본문 바로가기

Computer Science/알고리즘 문제풀이

Programmers > #28 winter recruit > #2 [JAVA]

winter intern #2


1. 문제 설명


- (5,5) 2차원 평면에서 (0,0)에 물체가 있다. 이 물체에 명령어 "U","D","R","L"을 주어서 각각 위, 아래, 오른쪽, 왼쪽으로 움직일 수 있다.

- 이때, 이 물체가 움직인 거리의 총 합을 구하라.

- 단, 물체는 한번 지난 경로를 중복하여 지날때는 이를 무시한다.

- 평면 밖을 나가게 된다면, 이를 무시하고 움직이지 않는다. 


2. 나의 코드


import java.util.*;

class Solution {
    public int solution(String dirs) {
        int answer = 7;
        int lx =0,ly=0;
        String [] directs = dirs.split("");
        boolean flag = true;
        ArrayList <Vec> vlist = new ArrayList<Vec>();
        
        for(int i=0;i<directs.length;i++){
            int fx = lx;
            int fy = ly;
            flag = true;
            Vec vc = new Vec();
            vc.Fset(fx,fy);
            if(directs[i].equals("U")){
                if(ly+1 > 5){
                    continue;
                }
                else
                    ly++;
            }
            else if(directs[i].equals("D")){
                if(ly-1 < -5){
                    continue;
                }
                else
                    ly--;
            }
            else if(directs[i].equals("R")){
                if(lx-1 > 5){
                    continue;
                }
                else
                    lx++;
            }
            else if(directs[i].equals("L")){
                if(lx-1 < -5){
                    continue;
                }
                else
                    lx--;
            }
                vc.Lset(lx,ly);
            if(lx >= -5 && lx <= 5 && ly >= -5 && ly <= 5){
                if(i==0)
                    vlist.add(vc);
                else{
                    int size = vlist.size();

                    for(int j =0;j<size;j++){
                        Vec vtemp = vlist.get(j);
                        String ftemp = "";
                        String ltemp = "";
                        ftemp += String.valueOf(fx);
                        ftemp += String.valueOf(fy);
                        ltemp += String.valueOf(lx);
                        ltemp += String.valueOf(ly);
                        if(vtemp.Fget().equals(ftemp) && vtemp.Lget().equals(ltemp)){
                            flag = false;
                            break;
                        }
                    }
                    if(flag)
                        vlist.add(vc);
                }
            }
        }
        answer = vlist.size();
        return answer;
    }
}
class Vec {
    String fv = "";
    String lv = "";
    public void Fset(int x, int y){
        fv += String.valueOf(x);
        fv += String.valueOf(y);
    }
    public void Lset(int x, int y){
        lv += String.valueOf(x);
        lv += String.valueOf(y);
    }
    public String Fget(){
        return fv;
    }
    public String Lget(){
        return lv;
    }
}