문제
접근방법
배열을 정렬한 후 자기의 오른쪽과 값을 비교한다. 같으면 패스, 다르면 그 값을 리턴!
소스코드
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]을 반환한다.
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][leetcode] Move Zeros :: seoftware (0) | 2020.04.05 |
---|---|
[C++][leetcode] Maximum Subarray :: seoftware (0) | 2020.04.03 |
[C++][leetcode] happy numbers :: seoftware (0) | 2020.04.03 |
[C++] 백준 1920번 수 찾기 :: seoftware (0) | 2020.03.28 |
[C++][프로그래머스] 위장 - 해시 :: seoftware (0) | 2020.03.27 |
댓글