티스토리 뷰

문제

<그림1: 문제 설명>

문제는 쉽다. 입력의 줄에 처음에는 input 개수 n이 주어지고 그만큼의 input에 대해 각 abs(input[i]-input[i+1])이 1과 n-1사이에 있으면 된다. 또한 주의할 점은 이런 abs(input[i]-input[i+1])이 1부터 n-1까지 모두 나와야 한다는 것이다. 따라서 다음과 같이 bitset을 이용하여 작성했다.

temp[(abs(temp2 - temp1)<3000? abs(temp2 - temp1):0)]=1 을 통해 marking하고 (삼항연산자는 범위 밖의 예외 처리를 한 것이다.) 1부터n-1까지 모두 marking되었는지 check를 통해 출력값을 결정하면 된다.

 

#include<iostream>
#include<bitset>
using namespace std;
int main() {
	int n, temp1, temp2;
	bitset<3000> temp;
	bool flag;
	while (cin >> n) {
		temp.reset();
		flag = true;
		cin >> temp1;
		for (int i = 1; i < n; i++) {
			cin >> temp2;
			temp[(abs(temp2 - temp1)<3000? abs(temp2 - temp1):0)]=1;
			temp1 = temp2;
		}
		for (int i = 1; i < n; i++) if (temp[i] == 0) flag = false;
		cout << ((flag == true) ? "Jolly" : "Not jolly") << endl;
	}
	return 0;
}
댓글