새소식

코딩테스트/코드트리

[코드트리 챌린지] 되돌아오기

  • -

[문제]

https://www.codetree.ai/cote/13/problems/come-back?&utm_source=clipboard&utm_medium=text 

 

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

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

www.codetree.ai

[문제 풀이]

x와 y 좌표가 (0,0)일때 지시에 따라서 움직이면 몇초가 지나서 자기 자신으로 오는지 파악하는 문제.

 

사실 기본개념을 보면 범위를 벗어나지 못하게 inRange()함수를 만들거나 해서 헷갈릴수 있지만 해당 문제에서는 음수로 50000을 가더라도 배열을 만들어서 구현할 필요가 없기 때문에 문제가 될 부분이 없다.

그저 방향에 따른 가야하는 x,y 가중치만 잘 구현해두면 생각보다 쉽게 구현이 가능하다.

 

여기선 동, 남, 서, 북의 형태로 북은 y좌표가 +1이 될때를 기준으로 만들었다.

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

 

기본개념을 모두 봤으면 어렵지 않게 풀 만한 문제이니 꼭 풀어보자.

[회고]

.

[코드]

#include <iostream>
#include <vector>

using namespace std;

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

int dict(char compass){
    int answer = 0;
    if(compass == 'E'){
        answer = 0;
    }
    else if(compass == 'S'){
        answer = 1;
    }
    else if(compass == 'W'){
        answer = 2;
    }
    else if(compass == 'N'){
        answer = 3;
    }
    return answer;
}

int main() {
    int answer = 0;
    int n;
    cin>>n;
    int x = 0, y = 0;
    int idx = 0;
    vector<pair<char, int> > compass(n);
    
    for(int i = 0;i<n;i++){
        cin>>compass[i].first>>compass[i].second;
    }

    for(int i = 0;i<n;i++){
        int d = dict(compass[i].first);
        while(compass[i].second--){
            idx++;
            x += dx[d];
            y += dy[d];
            if(x == 0 && y == 0){
                answer = idx;
                cout<<answer<<endl;
                return 0;
            }
        }
    }

    cout<<-1<<endl;
    return 0;
}

 

Contents

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

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