😈 알고리즘/🍃 인프런 #1

🙏 24. Jolly Jumpers

Buᐢ༝ᐢy 2023. 3. 14. 18:00

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비 - 인프런 | 강의

모든 문제에 대한 저작권은 위 강의에 있습니다.

문제

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

입력 설명

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

출력 설명

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

입력 예제 1

5
1 4 2 3 7

출력 예제 1

YES

제출 코드

2023년 2월 10일

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

string CheckNumbers(vector<int> numbers)
{
		int length = numbers.size();
		vector<int> check(length, 0);
	
		for (int i = 1; i < length; i++)
		{
				int dif = abs(numbers[i] - numbers[i - 1]);
				
				if (dif > 0 && dif < length && check[dif] == 0)
						check[dif]++;
				else
						return "NO";
		}
	
		return "YES";
}

int main()
{
		int N = 0;
		cin >> N;
	
		vector<int> numbers;
	
		for (int i = 0; i < N; i++)
		{
				int temp = 0;
				cin >> temp;
		
				numbers.push_back(temp);
		}
	
		cout << CheckNumbers(numbers);
	
		return 0;
}

풀이

절대값으로 만드는 이유는 음수가 나올 수 있기 때문에 **abs(int value)**를 사용하여 절대값으로 만들어준다. 그리고 for문을 돌 때 범위를 잘 정하도록 한다. 앞 뒤 인덱스의 차를 냈을 때 0보다 커야하고 마지막 수보다 작아야 한다.