본문 바로가기

Algorithm/Brute Force

(C++) - LeetCode (easy) 1640. Check Array Formation Through Concatenation

반응형

https://leetcode.com/problems/check-array-formation-through-concatenation/description/

전수조사 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

key는 각 조각의 시작 숫자, value는 그 조각의 내용을 저장할 unordered_map pieceMap을 선언 후 값을 저장합니다.

📔 풀이과정

arr의 원소에 대해 for loop를 수행합니다.1. pieceMap에 arr원소값이 없다면 조각을 이용해 arr을 만들 수 없으므로 false를 반환합니다.2. 있다면 해당 조각 내용을 pieceMap에서 찾아 지역변수 piece를 선언 후 저장합니다. 이후 piece의 원소를 순회하며 arr과 순서가 맞는지 비교해 맞지 않다면 false를 반환합니다.

📔 정답 출력 | 반환

모든 조건에 부합하므로 true를 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) {
        unordered_map <int, vector<int>> pieceMap;
        for(auto piece : pieces) {
            pieceMap[piece[0]] = piece;
        }

        for(int i = 0; i < arr.size();) {
            if(pieceMap.find(arr[i]) == pieceMap.end()) {
                return false;
            }
            vector <int> piece = pieceMap[arr[i]];
            for(auto num : piece) {
                if(arr[i++] != num) {
                    return false;
                }
            }
        }
        return true;
    }
};

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