본문 바로가기
일반

[코드트리 챌린지] 이동경로상에 있는 모든 숫자 더하기

by wwns 2023. 9. 25.
반응형

코드트리 3주 차 블로그챌린지입니다.

저는 기업별 커리큘럼을 신청하였고 오늘은 삼성 커리큘럼을 풀어 보았습니다

이동경로상에 있는 모든 숫자 더하기 문제를 리뷰해보고자 합니다

https://www.codetree.ai/cote/13/problems/add-all-the-numbers-on-the-path/description

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai


풀이방법

  • 중앙에서 시작하므로 n/2, n/2가 시작점이 된다
  • 명령에 따라 왼쪽, 오른쪽으로 회전한다
    • 회전에 따라 바라보는 방향 인덱싱을 어떻게 할지가 중요하다
  • 방문한 위치들의 값을 모두 더해서 출력한다
import java.util.*;
import java.io.*;

public class Main {
    public static int[][] map, direction ={{-1,0},{0,1},{1,0},{0,-1}};
    public static int dir;
    public static char[] commands;
    public static void main(String[] args) throws IOException{
        // 여기에 코드를 작성해주세요.
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int n = Integer.parseInt(st.nextToken()), t = Integer.parseInt(st.nextToken());

        commands = br.readLine().toCharArray();

        map = new int[n][n];
        for(int i=0; i<n; i++) {
            map[i] = Arrays.stream(br.readLine().split(" " )).mapToInt(Integer::parseInt).toArray();
        }
        int x = n/2, y = n/2;
        int sum = map[x][y];
        for(char command : commands) {
            if(command == 'F') {
                int nx = x + direction[dir][0], ny = y + direction[dir][1];
                if(isRange(nx, ny, n)) {
                    sum += map[nx][ny];
                    x = nx;
                    y = ny;
                }
            }
            else if(command == 'R') dir = (dir + 1) % direction.length;
            else dir = (dir - 1 < 0 ? direction.length-1 : dir-1);	// 해설 dir = (dir+3) % direction.length;
        }

        System.out.println(sum);
        br.close();
    }
    public static boolean isRange(int x, int y, int n) {
        return x<0 || x>=n || y<0 || y>=n ? false : true;
    }
}

왼쪽방향을 인덱싱하는 방법을 알아갔다

반응형