티스토리 뷰

알고리즘/C++

[C++] jolly jumpers

지휘리릭 2020. 2. 24. 15:53

N개의 정수로 이루어진 수열에 대해 서로 인접해 있는 두 수의 차가 1에서 N-1까지의 값을 모두 가지면 그 수열을 유쾌한 점퍼(jolly jumper)라고 부른다.

 

#include<stdio.h>
#include<vector>
#include<algorithm>

int main() {
	int n, i, value, ans = 0;
	scanf("%d", &n);
	std::vector<int> checkArr(n);

	int pre, now, temp;
	scanf("%d", &pre);
	for (i = 1; i < n; i++) {
		scanf("%d", &now);
		temp = abs(pre - now);
			// temp 값의 범위를 먼저 확인해야함
		if (temp > 0 && temp < n && checkArr[temp] == 0) {
			checkArr[temp] = 1;
		}
		else if (checkArr[temp] > 0 || temp >= n) {
			printf("NO");
			return 0;
		}
		pre = now;
	}
	printf("YES");
	return 0;
}

 

n크기의 배열에 1 ~ n-1 값을 넣는다. 배열이 생성됨과 동시에 0으로 초기화된다. 

서로 인접해 있는 두 수의 차를 구해야 하므로, 이전의 입력받은 값과 새롭게 입력받는 값을 비교하여 시간을 단축한다.

인접해 있는 두 수를 비교하여 구한 차이 값 temp을 checkArr 배열에 체크한다.

범위 밖의 차이값이 나오지 않도록 범위를 제한한다.

만약 이미 체크되어있는 값이라면 더 볼 것도 없이 졸리 점퍼가 아니므로 NO를 출력하고 나온다.

 

댓글