📄문제
N개의 정수로 이루어진 수열에 대해 서로 인접해 있는 두 수의 차가 1에서 N-1까지의 값을 모두 가지면 그 수열을 유쾌한 점퍼(jolly jumper)라고 부른다. 예를 들어 다음과 같은 수열에서 1 4 2 3 앞 뒤에 있는 숫자 차의 절대 값이 각각 3 ,2, 1이므로 이 수열은 유쾌한 점퍼가 된다. 어떤 수열이 유쾌한 점퍼인지 판단할 수 있는 프로그램을 작성하라.
⬇️ 입력
첫 번째 줄에 자연수 N(3<=N<=100)이 주어진다.
그 다음 줄에 N개의 정수가 주어진다. 정수의 크기는 int 형 범위안에 있습니다.
5 1 4 2 3 7 |
⬆️ 출력
유쾌한 점퍼이면 “YES"를 출력하고, 그렇지 않으면 ”NO"를 출력한다.
YES |
📝 풀이
#include <iostream>
int main()
{
bool isJumper[101]{ false, };
int N;
scanf_s("%d", &N);
int prev = 0, current = 0;
scanf_s("%d", &prev);
for (int i = 1; i < N; ++i)
{
scanf_s("%d", ¤t);
// 차이 구하기
int diff = std::abs(current - prev);
// 차이가 100을 넘는 경우는 불가능
if (diff > 100)
{
printf("NO");
return 0;
}
// diff에 해당하는 차이 사용
isJumper[diff] = true;
// prev 값 저장
prev = current;
}
for (int i = 1; i < N; ++i)
if (!isJumper[i])
{
printf("NO");
return 0;
}
printf("YES");
}
- isJumper라는 bool 배열을 만든 후 각 차이에 해당하는 원소값에 TRUE를 설정합니다.
- 만약 diff가 100을 넘어가는경우, 이것은 연속되는 차이가 될 수 없기에 예외로 리턴합니다.
- 마지막에 1번 원소부터 검사하여 하나라도 false가 있는경우 "NO", 모두 있는경우 "YES"를 출력합니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] 마라톤 (0) | 2023.10.13 |
---|---|
[C++] 석차 구하기 (0) | 2023.10.13 |
[C++] 연속 부분 증가수열 (0) | 2023.10.13 |
[C++] 온도의 최대값 (0) | 2023.10.13 |
[C++] 카드게임 (0) | 2023.10.13 |