본문 바로가기

Algorithm/Implementation

(C++) - LeetCode (easy) 1496. Path Crossing

반응형

https://leetcode.com/problems/path-crossing/description/

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. x, y 좌표를 저장할 구조체 Coord 를 선언해줍니다.2. map을 사용할 건데 구조체를 key로 설정시 operator <에 대해 override해줘야합니다.x좌표끼리 먼저 비교하고 x좌표가 같으면 y좌표를 비교하도록 재정의해줍니다.

📔 풀이과정

1. 좌표 coord를 선언 후 0,0으로 초기화해줍니다.2. key로는 좌표, 방문 여부를 value인 map visitMap을 선언 후 coord를 방문해줍니다.3. path의 원소를 순회하며 다음을 수행합니다.   3-1. 방향에 따라 coord 좌표를 갱신해줍니다.  3-2. visitMap에 갱신된 coord좌표가 이미 있다면 방문을 이미 했다는 뜻이므로 true를 반환합니다.  3-3. 없다면 visitMap에 갱신된 coord를 방문해줍니다.

📔 정답 출력 | 반환

이전 좌표를 한 번도 방문할 수 없는 길이라면 false를 반환해줍니다.


📕 Code

📔 C++

struct Coord {
    int x, y;
    bool operator<(const Coord& other) const {
        return x < other.x || (x == other.x && y < other.y);
    }
};

class Solution {
public:
    bool isPathCrossing(string path) {
        Coord coord = {0,0};
        map <Coord, bool> visitMap;
        visitMap[coord] = true;
        for(auto p : path) {
            if (p == 'N') {
                coord.y++;
            } else if (p == 'E') {
                coord.x++;
            } else if (p == 'S') {
                coord.y--;
            } else {
                coord.x--;
            }
            if (visitMap.count(coord)) return true;
            visitMap[coord] = true;
        }
        return false;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.