Approach

  • 맵을 활용해주었다. key값으로 target-nums[i], 타겟값에서 현재 인덱스의 nums값을 빼고 value 값으로 현재 인덱스에 +1을 하여 넣었다.
  • 맵에 있는 value 값이 0보다 크고, value - 1을 한 인덱스 값이 현재 인덱스 값과 같지 않다면(3+3 = 6, 과 같이 하나의 요소로 답이 나오는 것을 방지) ans 벡터에 현재 인덱스를 넣어주었다.
  • ans 벡터에 중복되는 값을 제거해주기위해 unique를 통해 중복되는 값을 뒤로 밀어낸뒤 erase를 활용하여 끝에 존재하는 중복값을 지워주었다.

Code

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map;
        vector<int> ans;

        for(int i = 0; i < nums.size(); i++)
        {
            map[target-nums[i]] = i+1;
        }

        for(int i = 0; i < nums.size(); i++)
        {
            if(map[nums[i]] && map[nums[i]]-1 != i)
            {
                ans.push_back(map[target-nums[i]]-1);
                ans.push_back(i);
            }
        }

        ans.erase(unique(ans.begin(), ans.end()), ans.end());

        return ans;
    }
};

Result


추가적인 해결방법

  • find함수를 활용하여 target에 nums[i]를 뺀 값이 존재할 경우. ans에 target-nums[i]값의 인덱스와 i인덱스 값을 넣어준다.
  • 존재하지 않을경우. target-nums[i]를 키 값으로하고 i를 value로 지정하여 해당 key값이 존재하면 i를 반환하도록 한다.
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map;
        vector<int> ans;

        for(int i = 0; i < nums.size(); i++)
        {
            if(map.find(target - nums[i]) != map.end())
            {
                ans.push_back(map[target-nums[i]]);
                ans.push_back(i);
            }
            else
            {
                map[nums[i]] = i;
            }
        }

        return ans;
    }
};

profile
누누의 잡다저장소

0개의 댓글