Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
more
Archives
Today
Total
관리 메뉴

아무거나 내꺼 공부할래

Jolly Jumpers / c / 제한시간 없음 본문

[c언어&c++] 알고리즘 공부/인프런(Inflearn)

Jolly Jumpers / c / 제한시간 없음

mero95 2021. 1. 18. 16:26

▣ 문제

- N개의 정수로 이루어진 수열에 대해 서로 인접해 있는 두 수의 차가 1에서 N-1까지의 값을 모두 가지면 그 수열을 유쾌한 점퍼(jolly jumper)라고 부른다. 예를 들어 다음과 같은 수열에 서 1 4 2 3 앞 뒤에 있는 숫자 차의 절대 값이 각각 3 ,2, 1이므로 이 수열은 유쾌한 점퍼가 된다. 어떤 수열이 유쾌한 점퍼인지 판단할 수 있는 프로그램을 작성하라.

 

▣ 입력설명

- 첫 번째 줄에 자연수 N(3<=N<=100)이 주어진다. 그 다음 줄에 N개의 정수가 주어진다. 정수의 크기는 int 형 범위안에 있습니다.

 

▣ 출력설명

- 유쾌한 점퍼이면 “YES"를 출력하고, 그렇지 않으면 ”NO"를 출력한다.

 

▣ 출력설명

5
1 4 2 3 7

 

▣ 출력설명

YES

<내 코드>

#pragma warning(disable:4996)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main() {
	int n;
	int a[101];
	int temp;
	int sum = 0;
	int check = 0;

	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
		sum += i;
	}

	for (int i = 0; i < n - 1; i++) {
		temp = abs(a[i] - a[i + 1]);
		if (temp > n - 1 || temp == 0) {
			printf("NO\n");
			exit(0);
		}
		else {
			check += temp;
		}
	}
	if (check == sum) printf("YES\n");
	else printf("NO\n");
	return 0;
}

 

숫자의 차가 겹칠경우를 생각하지 못함

 

<수정한 코드>

#pragma warning(disable:4996)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main() {

	int n;
	int check[101] = { 0 };
	int temp;
	int a[101];
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
	}

	for (int i = 1; i <= n - 1; i++) {
		temp = abs(a[i] - a[i + 1]);
		if (temp > n - 1 || temp == 0) {
			printf("NO\n");
			exit(0);
		}
		else {
			check[temp] = 1;
		}
	}

	for (int i = 1; i < n; i++) {
		if (check[i] == 0) {
			printf("NO\n");
			exit(0);
		}
	}
	printf("YES\n");
	return 0;
}

check라는 배열을 만들어서 하나씩 확인하는 방법밖에 없다

 

.