데이터 엔지니어링 정복/Algorithm

[구현] 이코테 - 상하좌우

eeaarrtthh 2023. 4. 2. 22:42
728x90
반응형

 

switch문과 if문을 을 써서 풀어봤는데 그냥 정답대로 푸는게 좋은 것 같다.

 

상하좌우로 움직일 지도의 크기 N이 주어지고

어느 방향으로 움직일지 입력받는다.

 

R, L, U, D 각각 오른쪽, 왼쪽, 위, 아래로 한 칸씩 움직이게 되는데 이때 지도의 크기(1~N)보다 작거나 크면

지도를 벗어나는 것이므로 무효처리해야 한다.

 

 

-자바

package implementation;

public class ThisCote_4_1 {

    static int N, x, y;

    public static void main(String[] args) {
        N = 5;
        char[] roots = {'R', 'R', 'R', 'U', 'D', 'D'};
        x = 1; y = 1;

        for( char s : roots ) {
            move(s);
        }

        System.out.println( x + " " + y );
    }

    public static void move(char c) {
        int nx = 0;
        int ny = 0;

        switch(c) {
            case 'R': {
                ny = 1;
                if( checkMove(x+nx, y+ny) ) {
                    break;
                }
                y = y+ny;
                break;
            }
            case 'L': {
                ny = -1;
                if( checkMove(x+nx, y+ny)) {
                    break;
                }
                y = y+ny;
                break;
            }
            case 'U': {
                nx = -1;
                if( checkMove(x+nx, y+ny)) {
                    break;
                }
                x = x+nx;
                break;
            }
            case 'D': {
                nx = 1;
                if( checkMove(x+nx, y+ny)) {
                    break;
                }
                x = x+nx;
                break;
            }
        }
    }

    public static boolean checkMove(int xx, int yy) {
        if( xx < 1 || yy > N ) {
            return true;
        }
        return false;
    }

}

 

-자바

package implementation;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class ThisCote_4_1_answer {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt( br.readLine() );
        StringTokenizer st = new StringTokenizer( br.readLine() );

        int x = 1;
        int y = 1;

        //L, R, U, D에 따른 이동 방향
        int[] dx = {0, 0, -1, 1};
        int[] dy = {-1, 1, 0, 0};
        String[] moveTypes = {"L", "R", "U", "D"};

        while( st.hasMoreTokens() ) {
            int nx = 0;
            int ny = 0;
            String s = st.nextToken();


            for( int i=0; i<moveTypes.length; i++ ) {
                if( s.equals(moveTypes[i]) ) {
                    nx = x + dx[i];
                    ny = y + dy[i];
                }
            }

            if( nx < 1 || nx > N || ny < 1 || ny > N ) {
                continue;
            }
            x = nx;
            y = ny;
        }

        System.out.println(x+" "+y);
    }
}

 

-파이썬

N = int( input() )
x, y = 1, 1
plans = input().split()

dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']

for plan in plans:

    for i in range( len(move_types) ):
        if plan == move_types[i]:
            nx = x+dx[i]
            ny = y+dy[i]

    if nx < 1 or nx > N or ny < 1 or ny > N:
        continue

    x, y = nx, ny

print(x, y)
728x90
반응형