일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 쓰레드
- 알고리즘
- 병행성 관련 오류
- directx
- 그리디알고리즘
- OS
- Direct12
- 동적계획법
- 스케줄링
- 멀티프로세서
- 다이나믹 프로그래밍
- 영속성
- 파일시스템 구현
- 락
- 컨디션 변수
- 멀티쓰레드
- 운영체제
- DirectX12
- codility
- 병행성
- I/O장치
- DirectX 12
- 프로그래머스
- 다이나믹프로그래밍
- 백준
- 렌더링 파이프라인
- 타입 객체
- 그리디 알고리즘
- 자료구조
- 디자인패턴
Archives
- Today
- Total
기록공간
MissingInteger (Codility) 본문
반응형
문제
주어진 숫자들 중 연속되지 않고 중간에 비어 있는 숫자가 있는 경우 가장 작은 정수를 출력하는 문제이다.
(이 정수는 0보다 크다)
만약 연속으로 끝까지 이어진 경우에는 그 이후의 숫자를 출력하면 된다. 그리고 음수만 존재하는 경우에는 조건을 만족하는 가장 작은 정수인 1을 출력하면 된다.
해결 방법
우선 주어진 숫자가 순서가 맞아야 쉽게 정답을 찾을 수 있으므로 오름차순 정렬한다.
음수만 있는 경우를 알 수 있도록 가장 끝 값이 음수인지 검사한다. 만약 음수라면 1을 출력한다.
이제 처음부터 끝까지 반복하며, 중간에 숫자가 비었는지 검사한다. 음수는 정답에 포함되어 있지 않으므로 생략하고 진행한다. 만약 이전 값과 현재 값의 차가 2이상이라면 중간에 숫자가 한가지 이상 비어있다는 것으로 현재 값의 +1을 하여 출력하면 된다.
코드는 다음과 같다.
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int>& A)
{
int result = 0;
sort(A.begin(), A.end()); // 정렬
// 모두 음수인 경우
if (*A.rbegin() <= 0) return ++result;
for (const auto iter : A)
{
if (iter <= 0) continue;
if (iter - result >= 2) break;
result = iter;
}
return ++result;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
CountDiv (Codility) (0) | 2020.07.18 |
---|---|
PermCheck (Codility) (0) | 2020.07.17 |
BinaryGap (Codility) (0) | 2020.07.13 |
폰켓몬 (프로그래머스) (0) | 2020.07.03 |
등굣길 (프로그래머스) (0) | 2020.07.01 |
Comments