개인 공부/코딩테스트
[C++][leetcode] single number :: seoftware
seowit
2020. 4. 3. 15:44
문제
접근방법
배열을 정렬한 후 자기의 오른쪽과 값을 비교한다. 같으면 패스, 다르면 그 값을 리턴!
소스코드
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]을 반환한다.