새소식

코딩테스트/코드트리

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

  • -

[문제]

https://www.codetree.ai/cote/13/problems/add-all-the-numbers-on-the-path?&utm_source=clipboard&utm_medium=text 

 

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

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

www.codetree.ai

[문제 풀이]

기본이 북쪽을 향하고 움직이고 있을때 R이나 L이 나오면 시계,반시계 방향으로 회전을 해주고 F가 나오면 직진을 해서 해당 칸에 있는 숫자를 더해주자.

 

북쪽, 동쪽, 남쪽, 서쪽으로 가게 만들어 주기 위해서

int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};

 

dx와 dy를 이와 같이 세팅을 해주었다.

이제 L, R, F를 받아준 문자열을 방문하면서 R이면 시계방향, L이면 반시계 방향, F면 직진을 해주면서 범위내에 있다면 해당 숫자를 더해줘서 answer로 만들어주자.

 

[회고]

두번이나 틀려서 뭐가 문제인가 했는데 dx[4] = {-1,0,1,0} 부분에서 1도 -1로 작성해두었었다.

코드에 주의하자.

[코드]

#include <iostream>

using namespace std;

int n;
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int arr[101][101];

bool inRange(int x ,int y){
    if(x >= 0 && x < n && y >= 0 && y < n){
        return true;
    }
    return false;
}

int main() {
    int t;
    cin>>n>>t;
    string s;
    cin>>s;

    for(int i = 0;i<n;i++){
        for(int j = 0;j<n;j++){
            cin>>arr[i][j];
        }
    }

    int x = n / 2;
    int y = n / 2;
    int dict = 0;

    int answer = 0;
    answer += arr[x][y];

    for(int i = 0;i<s.size();i++){
        if(s[i] == 'R'){
            dict = (dict + 1) % 4;
        }
        else if(s[i] == 'L'){
            dict = (dict + 3) % 4;
        }
        else if(s[i] == 'F'){
            int nextX = x + dx[dict];
            int nextY = y + dy[dict];
            if(inRange(nextX,nextY) == false){
                continue;
            }
            x += dx[dict];
            y += dy[dict];
            answer += arr[x][y];
        }
    }

    cout<<answer<<endl;

    return 0;
}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.