본문 바로가기
개인 공부/코딩테스트

[C++][leetcode] single number :: seoftware

by seowit 2020. 4. 3.

문제

 

 

접근방법

 

배열을 정렬한 후 자기의 오른쪽과 값을 비교한다. 같으면 패스, 다르면 그 값을 리턴!

 

소스코드

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end(), greater<int>());
        int target = -1;
        for(int i = 0; i<nums.size()-1;i+=2){
            if(nums[i] != nums[i+1]){
                target = i;
                break;
            }
        }
        if(target == -1) target = nums.size() -1;
        return nums[target];
    }
};

1. 배열을 정렬한다(sort)

2. i 값을 +2씩 해주면서 자기의 오른쪽과 값을 비교하도록 한다.

3. 만약 오른쪽과 값이 다르면 그 인덱스를 target에 저장한다.

4. for문 안에서 target 값이 변경되지 않는 경우는 정렬된 벡터 중 마지막 값이 다른 경우이다. 따라서 이 경우는 if문으로 처리해준다.

5. 저장된 target 인덱스에 해당하는 값 num[target]을 반환한다. 

댓글