아무거나 내꺼 공부할래
Jolly Jumpers / c / 제한시간 없음 본문
▣ 문제
- 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라는 배열을 만들어서 하나씩 확인하는 방법밖에 없다
.
'[c언어&c++] 알고리즘 공부 > 인프런(Inflearn)' 카테고리의 다른 글
3의 개수는?(Google 인터뷰) / c / 제한시간 없음 (0) | 2021.01.20 |
---|---|
N!에서 0의 개수 / c / 제한시간 없음 (0) | 2021.01.20 |
온도의 최대값 (1차원 배열 구간합) / c / 제한시간 : 1초 (0) | 2021.01.17 |
분노유발자 / c / 제한시간 없음 (0) | 2021.01.17 |
Anagram(구글 인터뷰 문제) / c / 제한시간 없음 (0) | 2021.01.16 |