출처 : programming-challenges.com
n개의 정수(n>0)로 이루어진 수열에 대해 서로 인접해 있는 두 수의 차가 1에서 n-1까지의 값을 모두 가지면 그 수열을 유쾌한 점퍼(jolly jumper)라고 부른다. 예를 들어 다음과 같은 수열에서
1 4 2 3
앞 뒤에 있는 숫자 차의 절대 값이 각각 3,2,1이므로 이 수열은 유쾌한 점퍼가 된다. 어떤 수열이 유쾌한 점퍼인지 판단할 수 있는 프로그램을 작성하라.
Input
각 줄 맨 앞에는 3000 이하의 정수가 있으며 그 뒤에는 수열을 나타내는 n개의 정수가 입력된다. 맨 앞 숫자가 0이면 출력하고 종료한다.
output
입력된 각 줄에 대해 "Jolly" 또는 "Not Jolly"를 한 줄씩 출력한다
Sample Input
4 1 4 2 3
5 1 4 2 -1 6
※ 주의: 각 줄의 맨 앞의 숫자는 수열의 갯수이다. 첫번째 입력인 4 1 4 2 3 의 맨 앞의 4는 뒤에 4개의 숫자가 온다는 것을 의미함
Sample Output
Jolly
Not jolly
151개의 풀이가 있습니다.
파이썬입니다. jolly 여부를 판단하는 do 함수는 입력받은 리스트의 인접 원소들을 짝지어서 그 차이를 구합니다. jolly jump 인 값은 이 차이의 집합을 정렬한 결과가 1, 2, 3, ..., n - 1 이기 때문에 그냥 set 으로 만들어서 비교했습니다.
def do(xs):
return {abs(x[0] - x[1]) for x in zip(xs, xs[1:])} == set(range(1, len(xs)))
data = []
while True:
i = [int(x) for x in input().split()]
if i[0] == 0:
break
data.append(i[1:])
for d in data:
if do(d):
print("Jolly")
else:
print("Not Jolly")
def is_jolly(nums):
diff = [abs(a - b) for a, b in zip(nums, nums[1:])]
return 'Jolly' if len({abs(a - b) for a, b in zip(diff, diff[1:])}) == 1 else 'Not jolly'
while 1:
line = list(map(int, input().strip().split()))
n, nums = line[0], line[1:]
if n == 0:
break
print(is_jolly(nums))
def jolly?(seq)
differences = seq.drop(1).inject(seq.take(1)) do |result, elem|
prev = result.pop
result << (prev - elem).abs
result << elem
result
end
differences.pop
differences.sort == (1 .. (seq.length-1)).to_a
end
data_set = STDIN.read.split(/[\r\n]/)
data_set.each do |data|
if jolly? data.split(/\s+/).drop(1).map(&:to_i)
puts "Jolly"
else
puts "Not jolly"
end
end
#!/usr/bin/python
import os
import sys
def main():
if len(sys.argv) is 1:
print "set input file"
else:
f = open(sys.argv[1],'r')
lines = f.readlines()
for line in lines:
n = int(line.split()[0])
check = [0] * (n-1)
for i in range(2, n+1):
abscha=abs(int(line.split()[i])-int(line.split()[i-1]))
if abscha < n:
check[abscha-1] = 1
gob = 1
for i in range(0, n):
gob=gob * int(check[0])
if gob == 1:
print "Jolly"
else:
print "Not jolly"
if __name__ == '__main__':
main()
sys.exit(0)
clojure
(def not-nil? (complement nil?))
(defn ??-coll? [?? coll]
(->> coll
(reduce #(when (and %1 (= (?? %1) %2)) %2))
not-nil?))
(def dec-coll? (partial ??-coll? dec))
(defn jolly? [coll]
(->> coll
(partition 2 1)
(map #(Math/abs (apply - %)))
dec-coll?))
(map jolly? [[1 4 2 3]
[1 4 2 -1 6]])
;=> (true false)
[파이썬]
def Jolly(l):
buff = []
i = 1
while i < len(l):
buff.insert(i, abs(l[i-1] - l[i]))
i += 1
buff = list(set(buff))
if buff[0] == 1 and buff[-1]*(buff[-1]+1)/2 == sum(buff):
print "Jolly"
else:
print "Not Jolly"
n1 = [4,1,4,2,3]
n2 = [5,1,4,2,-1,6]
Jolly(n1)
Jolly(n2)
Jolly
Not Jolly
파이썬입니다.
1부터 n-1까지의 값을 모두 가지고 있어야 한다는 조건이 있어서 비트배열을 이용해 보았습니다.
def jolly(s):
s = map(int, s.split()[1:])
m = [False] * (len(s)-1)
for i in range(len(s)-1):
idx = abs(s[i]-s[i+1])-1
if idx < len(m):
m[idx] = True
return len(m) == m.count(True) and "Jolly" or "Not jolly"
print jolly("4 1 4 2 3")
print jolly("5 1 4 2 -1 6")
def jolly(n, l):
return "Jolly" if sorted([abs(l[i]-l[i+1]) for i in range(n-1)]) == range(1, n) else "Not jolly"
while True:
line = [int(x) for x in raw_input().split()]
n, l = line[0], line[1:]
if n == 0:
break
print jolly(n, l)
파이썬 3.4 입니다. 풀고나니 1부터 n-1까지의 값을 모두 가지고 있어야 한다는 조건을 활용하질 못 했네요
def call_jol(data):
diff = []
decision_num = 0
call = 'jolly'
for x in range(len(data)-1):
diff_ele = abs(data[x+1]-data[x])
diff.append(diff_ele)
for x in range (len(diff)):
if diff[x] in data:
pass
else:
decision_num += 1
if decision_num != 0:
call = 'Not jolly'
return call
data = list(map(int,input("Enter your numbers.\n").split(" ")))
print (call_jol(data))
package my;
import java.util.Scanner;
public class T {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("수열 수 입력:");
String temp =in.nextLine();
String[] t= temp.split(" ");
int[] arr= new int[t.length];
for(int i=0;i<t.length;i++){
arr[i]=Integer.parseInt(t[i]);
}
int base=arr[0]-1;
String result="jolly";
for(int i=1;i<arr.length-1;i++){
int cal = 0;
if(arr[i]>arr[i+1]){
cal=arr[i]-arr[i+1];
}else{
cal=arr[i+1]-arr[i];
}
if(base!=cal){
result="Not jolly";
}
base-=1;
}
System.out.println(result);
}
}
파이썬 입니다~ 첫번째 것은 set을 활용, 두번째 것은 길가의 풀님 꺼를 배껴봤습니다~(개악버젼이네요ㅎㅎ;;)
class Jolly:
def __init__(self,a,b):
self.n_lst = range(1,a)
self.lst = b
def start(self):
x_lst = []
for i in range(len(self.lst)-1):
numb = self.lst[i] - self.lst[i+1]
x_lst.append(abs(numb))
set_a = set(self.n_lst)
set_b = set(x_lst)
if set_a & set_b == set_a: print "Jolly"
else: print "Not Jolly"
test = Jolly(4, [1,4,2,3])
test.start()
class Jolly:
def __init__(self,a,b):
self.f_numb = a-1
self.lst = b
def start(self):
x = [False] * self.f_numb
for i in range(len(self.lst)-1):
a = abs(self.lst[i] - self.lst[i+1]) - 1
if a < len(x):
x[a] = True
check = True
for i in x:
if x[i] == False: check = False
if check == True:
print "Jolly"
else: print "Not Jolly"
test = Jolly(4, [1,4,2,3])
test.start()
Python으로 작성을 했는데... 다른분들 풀이 보니까 제가 너무 예제에 대해서만 생각 한것 같네요 방법은 인근 숫자들끼리 빼기한 값들을 List로 만들고 그 List가 N을 나타내는 제일 앞의 숫자와 제일 큰 숫자를 제외한 input 숫자들과 동일하면 Jolly를 나타내게 했습니다. 즉 4,1,4,2,3 중에서 단지 개수만 나타내는 제일앞의 4를 제외하고 나머지 1,4,2,3 중에 제일 큰 숫자인 4를 제외하는 것입니다. 빼기일테니 제일 큰숫자는 없는게 맞겠죠?
def Jolly (InputList):
JJList = InputList[1:]
Number = len(JJList)
SubList=[]
while Number-1:
Number -= 1
Sub = abs(JJList[Number-1] - JJList[Number])
SubList.append(Sub)
SubList.sort() #뺀값들만 모아서 Sort하여 정렬
JJList.sort()
JJList.pop()#빼기를 하게 되므로 최대값은 나올수가 없다. 때문에 sort한다음 pop을하여 마지막 숫자(Input List중 최대값)를 빼낸다.
if SubList == JJList: print("Jolly")
else : print("Not Jolly")
Jolly([4,1,4,2,3])
Jolly([5,1,4,2,-1,6])
python 입니다.
import unittest
def func(s, result="Jolly"):
l = s.split(" ")
n = int(l.pop(0))
for i in range(n-1):
if abs(int(l[i]) - int(l[i+1])) >= n : result = "Not Jolly"
print abs(int(l[i]) - int(l[i+1]))
return result
class Test(unittest.TestCase):
def test1(self):
self.assertEqual('Jolly', func('4 1 4 2 3'))
self.assertEqual('Not Jolly', func('5 1 4 2 -1 6'))
if __name__ == "__main__":
unittest.main()
루비입니다.
def jolly_jumpers?(array)
array.each_cons(2).map{|(a,b)| (a - b).abs }.sort == [*1...array.size]
end
puts jolly_jumpers?([1, 4, 2, 3]) ? "Jolly" : "Not Jolly"
puts jolly_jumpers?([5, 1, 4, 2, -1, 6]) ? "Jolly" : "Not Jolly"
C#으로 작성했습니다. 1. 문제에서 요구하는 code는 input 한 줄, output 한 줄 출력하는 게 아닌지요? sample은 input을 한꺼번에 받는 듯이 보여서 여쭤보았습니다. 저는 일단 가장 앞 줄에 정해진 n을 찾은 후에 나머지 숫자를 list에 집어 넣고 n과 list의 count를 비교했습니다. 다음에 list에 있는 숫자들 중에 1보다 작거나 n-1보다 큰 숫자는 무조건 다 없앴습니다. 그럼 당연히 1에서 n-1까지 숫자가 list에 남겠죠. 그리고 그 list의 count를 n-1과 비교했습니다. 2. BitArray에 i와 i+1의 차잇값을 저장하였습니다.
using System;
using System.Collections;
using System.Collections.Generic;
public bool IsJollyJumper(List<int> inputs)
{
var bits = new BitArray(inputs.Count);
for (int i = 0; i < inputs.Count - 1; i++)
{
var diff = Math.Abs(inputs[i] - inputs[i + 1]);
if (diff < 1 || diff >= inputs.Count || bits.Get(diff)) return false;
bits.Set(diff, true);
}
return true;
}
coding by python beginner
def chkJolly(l):
if l[0] == 0: return False
offset = []; chk_list = l[1:]
for i in range(l[0]-1): offset.append( abs(chk_list[i] - chk_list[i+1]) )
return 'Jolly' if len( [x for x in offset if x not in chk_list] ) == 0 else 'Not Jolly'
while True:
rs = chkJolly( list( map( int, input().split() ) ) )
if rs: print(rs)
else: break;
Using python
a = [1,3,6,5,9]
def Jolly(a):
b = []
for i in xrange(len(a)-1):
b.append(abs(a[i]-a[i+1]))
b.sort()
for i in range(len(b)-1):
if b[0] != 1:
return "Not Jolly"
elif b[i]+1 != b[i+1]:
return "Not Jolly"
return "Jolly"
print Jolly(a)
Sub Main()
Dim d() As Integer = Array.ConvertAll(Split(Console.ReadLine, " "), Function(n As String) CInt(Val(n)))
Dim c As Integer = Math.Abs(d(0) - d(1))
Dim result As Boolean = True
For i As Integer = 1 To d.Length - 1
Dim a As Integer = Math.Abs(d(i - 1) - d(i))
If i > 1 And Math.Abs(a - c) <> 1 Then
result = False
Exit For
End If
c = a
Next
Console.WriteLine(IIf(result, "Jolly", "Not Jolly"))
Console.ReadLine()
End Sub
insertion = input(); nn = int(insertion[0]); insertion = insertion[2:]
palette = []; insertion = list(insertion.split(" "))
for i in range(0, len(insertion)):
insertion[i] = int(insertion[i])
for ii in range(0, (len(insertion)-1)):
palette.append(abs(insertion[ii] - insertion[ii+1]))
palette = list(set(sorted(palette)))
if len(palette) == (len(insertion) - 1):
print("Jolly")
else:
print("Not Jolly")
Python 3.4로 작성했습니다. 별도로 클래스를 만들지는 않고, 그냥 쭉 절차적으로 작성해 보았습니다.
먼저, 입력된 값에서 제일 앞의 수는 사실상 의미가 없으므로(배열 혹은 리스트의 원소 개수를 다시 풀어 주는 것이므로) 잘라냈습니다. 'nn'이라는 변수로 할당해 주기는 했지만 굳이 쓰지는 않을 것입니다. 그런 다음, 리스트 내 각 인접 원소들끼리의 차의 절대값으로 이루어진 리스트를 하나 만들고, 거기서 중복되는 수를 지울 수 있도록 'list(set(원래의 리스트)' 구문으로 처리했습니다. 그렇게 하면 새롭게 얻어지는 리스트인 'palette'는, 중복 없이 첫 리스트 원소들 간의 차의 절대값으로만 이루어진 오름차순 리스트가 될 것입니다. 그리고 이 리스트 palette의 len() 값이 n-1, 즉 len(첫 리스트) - 1 이 된다면 "Jolly"를 출력할 조건을 만족하게 됩니다.
시험 결과 적절히 출력할 수 있었습니다.
def jolly(l):
ptrn=[x-x for x in range(1,len(l))]
for i in range(0,len(l)-1):
d=abs(l[i]-l[i+1])-1
if d>=len(ptrn) or ptrn[d]>0:return "Not Jolly"
ptrn[d]+=1
return "Jolly"
def jolly2(l):
n=len(l)
return "Jolly" if sorted([abs(l[i]-l[i+1]) for i in range(n-1)])==range(1,n) else "Not Jolly"
print jolly2([1,4,2,3])
ns = [1,4,2,3]
print ('Not Jolly','Jolly')[{abs(a-b) for a,b in zip(ns[1:],ns[:-1])}==set(range(1,len(ns)))]
Ruby
seqs = -> { (gets('0').split(/\n/)-['0']).map {|e| e.split.map &:to_i} }
is_j = ->n,seq { ([*1..n-1] - seq.each_cons(2).map {|a,b|(a-b).abs}).empty? }
chk_jj = -> { puts seqs[].map {|e| n,*seq=e; is_j[n,seq]? "Jolly":"Not Jolly" } }
Test
expect(is_j[4, [1,4,2,3]]).to eq true
expect(is_j[5, [1,4,2,-1,6]]).to eq false
# stdin/out test
$stdin = StringIO.new("4 1 4 2 3\n5 1 4 2 -1 6\n0\n")
expect { chk_jj.call }.to output("Jolly\nNot Jolly\n").to_stdout
Output
#=> chk_jj[]
4 1 4 2 3
5 1 4 2 -1 6
0
"Jolly"
"Not Jolly"
while __name__ == '__main__':
inpt = int(input('>>>'))
if not inpt: continue
nums = []
for x in range(inpt):
nums.append(int(input('>>>>>>')))
result = set(abs(x-y) for x, y in zip(nums, nums[1:]))
jumper_set = set(x for x in range(1,len(nums)))
if jumper_set == result: print('Jolly')
else: print('Not jolly')
파이썬 3.5.1
public boolean isJolly(int[] array){
int difference = 0 ;
int isJolly[] = new int[array[0]];
for(int i = 1 ; i < array.length-1 ;i++) {
difference = (int)Math.abs(array[i] - array[i+1] );
if(difference > 0 && difference <= array.length-1 ){
if(isJolly[difference] == 1)
return false;
else
isJolly[difference] += 1;
}
}
return true;
}
# 파이썬3.5.1
def jolly(n,j):
check = []
for i in range(n-1,0,-1):
if abs(j[n-i-1]-j[n-i]) == i:
check.append(True)
return bool(check)
a = input().split()
n,j = int(a[0]),list(map(int,a[1:]))
if jolly(n,j):
print('Jolly')
else:
print('Not jolly')
Python 3.4.4
data1 = [4, 1, 4, 2, 3]
data2 = [5, 1, 4, 2, -1, 6]
def jolly(data):
return {abs(x[0] - x[1]) for x in zip(data, data[1:])} == set(range(1, len(data)))
print(jolly(data1[1:]))
print(jolly(data2[1:]))
//java 정렬해서 차이가 1보다 크면 not jolly
Scanner in = new Scanner(System.in);
System.out.print("수열 수 입력:");
String temp = in.nextLine();
String[] data = temp.split(" ");
int data_size = Integer.parseInt(data[0]);
long delay = System.currentTimeMillis();
Arrays.sort(data);
boolean is_valid = true;
for (int i = 1; i < data_size; i++) {
if (i == 1) { // 사이즈 받는 첫 배열은 비교안함
continue;
}
if (Integer.parseInt(data[i]) - Integer.parseInt(data[i - 1]) > 1) {
is_valid = false;
break;
}
}
System.out.println(is_valid ? "Jolly" : "Not jolly");
in.close();
단순 구현 문제네요. 시간복잡도 O(n) 입니다. [C++]
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int chk[3333];
int a[3333];
int main(){
int n;
scanf("%d",&n);
for (int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
for (int i = 0; i < n-1; i++){
chk[abs(a[i]-a[i+1])] = 1;
}
for (int i = 1; i <= n-1; i++){
if (!chk[i]){
printf("Not jolly\n");
return 0;
}
}
printf("Jolly\n");
return 0;
}
import java.util.ArrayList;
import java.util.Scanner;
public class test {
public static void main(String[] argv) {
Scanner sc = new Scanner(System.in);
boolean isJolly = true;
int n = sc.nextInt();
ArrayList<Integer> numList = new ArrayList<Integer>();
for(int i = 0; i < n; i++){
numList.add(sc.nextInt());
}
for(int i = 0; i < numList.size() - 1 ; i++){
if(!numList.contains(Math.abs(numList.get(i) - numList.get(i+1)))){
isJolly = false;
break;
}
}
if(isJolly){
System.out.print("Jolly");
}else{
System.out.print("Not jolly");
}
}
}
#__author__ = 'Admin'
# def_name = check_jumper, input = length of the list, list / output = whether it is jumber or not, type of the result = strings
# what We need, how to organize this problem?
# first of all, should make the list of (1 ~ n-1)
#
def check_jumper(number, list):
checker_list = []
while number > 1:
number -= 1
checker_list.append(number)
for check in range(1,len(list)):
if abs(list[check-1]-list[check]) in checker_list:
checker_list.remove(abs(list[check-1]-list[check]))
if len(checker_list) == 0:
return "jolly"
else:
return "not jolly"
print check_jumper(4,[1,4,2,3]) #result : jolly
print check_jumper(5,[1,4,2,-1,6]) #result : not jolly
print check_jumper(6,[1,6,10,13,15,14]) #result : jolly
print check_jumper(3,[1,2,6,7]) #result : not jolly
public void JollyJumperDiscriminator(int[] input)
{
int length = input.Length;
int[] nNum = new int[length];
int[] differences = new int[length - 1];
for (int i = 0; i < length; i++)
{
nNum[i] = i + 1;
}
nNum = (from Nums in nNum
orderby Nums ascending
select Nums)
.ToArray();
for (int j = 0; j < input.Length - 1; j++)
{
differences[j] = Math.Abs(input[j + 1] - input[j]);
}
differences = (from Nums in differences
orderby Nums ascending
select Nums)
.ToArray();
int equalcount = 0;
for (int k = 0; k < differences.Length; k++)
{
if (differences[k] == nNum[k])
{
equalcount++;
}
}
if (equalcount == differences.Length)
{
Console.WriteLine("Jolly Jumper");
}
else
{
Console.WriteLine("Not Jolly Jumper");
}
대충 짜서 코드도 좀 더럽(?)고 무엇보다 입력 방식이 다릅니다ㅋㅋ 다만 결과는 같아요
def jolly_jumper(val):
va = val.strip().split('\n')
for v in va:
vi = v.split(' ')
if vi[0] == '0':
break
src = vi[1:]
jolly = set([abs(int(src[x]) - int(src[x + 1])) for x in range(0, len(src) - 1)]) \
- set(range(1, int(vi[0])))
print('Jolly' if len(jolly) == 0 else 'Not jolly')
jolly_jumper('''
4 1 4 2 3
5 1 4 2 -1 6
''')
Python 3.5.2에서 작성하였습니다.
list_ = list()
while list_ == [] or list_[-1][0] != '0':
list_ += [input().split(' ')]
list_.pop(-1)
for z in range(len(list_)):
if [ x for x in range(1,len(list_[z])-1)] ==\
sorted([abs(int(x[y]) - int(x[y+1])) for x in list_ for y in range(1,len(x)-1)]):
print('Jolly')
else:
print('Not Jolly')
#### 2016.12.20 D-429 ####
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int n;
void main() {
scanf("%d", &n);
int *arr = (int*) malloc (sizeof(int) * n);
for(int i=0;i<n;i++)
scanf("%d", &arr[i]);
int jolly = 0;
for(int i=0;i<n;i++)
for(int j=0;j<n-1;j++)
if(i == abs(arr[j] - arr[j+1])) {
jolly++;
break;
}
if(jolly == n-1)
printf("jolly \n");
else
printf("not jolly\n");
}
def joly_jumper(data):
n=data[0]
data=data[1:]
if n==0:
return "Jolly"
dic={}
for i in range(len(data)-1):
dic[abs(data[i]-data[i+1])]=1
data=list(dic.keys())
data.sort()
if data==list(range(1,n)):
return "Jolly"
return "Not jolly"
joly_jumper([5, 1, 4, 2, -1, 6])
import java.util.Arrays;
import java.util.Scanner;
public class Jolly_Jumper {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] arr;
int[] jol;
for(int num = scan.nextInt(); num != 0; num = scan.nextInt()){
arr = new int[num];
jol = new int[num-1];
for(int i = 0; i < num; i++){
arr[i] = scan.nextInt();
}
for(int i = 0; i < num-1; i++){
jol[i] = Math.abs(arr[i+1]-arr[i]);
}
Arrays.sort(jol);
for(int i = 1; i < num; jol[i-1] = 0, i++){
if(i != jol[i-1]){
System.out.println("Not Jolly");
break;
}
}
if(jol[num-2] == 0)
System.out.println("Jolly");
arr=null;
jol=null;
}
}
}
MATLAB 입니다. input, str2num 등으로 입력받고, diff, sort, sum, abs 등의 함수를 이용했습니다.
while 1
input_arr=str2num(input('input : ','s'));
n=input_arr(1);
if n==0
disp('finished');
return
end
if sum(abs(sort(abs(diff(input_arr(2:end))),'ascend') - (1:1:n-1)))==0
disp('Jolly');
else
disp('Not jolly');
end
end
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.IntStream;
import static java.lang.System.in;
public class JollyJumpers {
public static void main(String[] args) {
Scanner sc = new Scanner(in);
List<List<Integer>> nn = new ArrayList<>();
while (sc.hasNextLine()) {
int j = sc.nextInt();
if (j == 0) break;
List mm = new ArrayList(3000);
for (int i = 0; i < j; i++) {
mm.add(sc.nextInt());
}
nn.add(mm);
}
for (int i = 0; i < nn.size(); i++) {
jolly(nn.get(i).size(), nn.get(i));
}
}
private static void jolly(Integer n, List<Integer> nn) {
List<Integer> l = new ArrayList<>();
nn.stream().reduce((a, b) -> {
l.add(Math.abs(a - b));
return b;
});
System.out.println(IntStream.range(1, n).allMatch(i -> l.contains(i)) ? "Jolly" : "Not jolly");
}
}
import java.util.*;
public class jolly_jumper {
public static void jolly_def(String nums){
String [] array_nums = nums.split(" "); // {"1","4","2","3"}
int [] int_nums = new int[array_nums.length];
for(int k =0;k<array_nums.length;k++){int_nums[k]=Integer.parseInt(array_nums[k]);}
// int_nums = {1,4,2,3}
int [] minus_nums = new int[(array_nums.length)-1];
for(int i =0;i<(array_nums.length)-1;i++){minus_nums[i] = Math.abs(int_nums[i+1]-int_nums[i]);}
Arrays.sort(minus_nums);
int [] filter_nums = new int[array_nums.length-1];
for(int l=0;l<array_nums.length-1;l++){filter_nums[l] = l+1;}
if (Arrays.equals(minus_nums,filter_nums)){System.out.println("jolly");}
else{System.out.println("not jolly");}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String nums = sc.nextLine(); // 1 4 2 3
jolly_jumper.jolly_def(nums);
}
}
Python 3.6.1
def check_jolly(n, in_list):
in_num = list(map(int, in_list))
for i in range(1, n):
diff = abs(in_num[i - 1] - in_num[i])
if diff == i or diff == n - i:
pass
else:
return print("Not jolly")
return print("Jolly")
in_str = input("Enter number with space separater: ")
in_list = in_str.split()
in_length = int(in_list.pop(0))
if in_length == len(in_list):
check_jolly(in_length, in_list)
else:
print("Array numbers does not agree with arrays")
파이썬 3에서 작성하였습니다.
코드:
class jollyJumpers:
inputList = []
inputCount = 0
def __init__(self, inputList):
self.inputList = inputList
def printList(self):
print(self.inputList)
def checkJollyJumpers(self):
totalCount = self.inputList.pop(0) - 1
inputSet = set()
setCount = 0
for i in range(1, len(self.inputList)):
inputSet.add(abs(self.inputList[i-1] -self.inputList[i]))
setCount += 1
if abs(self.inputList[i-1] -self.inputList[i]) > self.inputCount and setCount != len(inputSet):
print ("Not Jolly")
return
print ("Jolly")
if __name__ == "__main__":
jolly = jollyJumpers([5, 1, 4, 2, -1, 6])
jolly.checkJollyJumpers()
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System;
using static System.Math;
class Program
{
static void Main()
{
List<string> sampleList = new List<string> { "4 1 4 2 3", "5 1 4 2 -1 6" };
sampleList.ForEach(n => WriteLine(IsJolly(n)));
}
static string IsJolly(string str)
{
var n = Array.ConvertAll(str.Split(), int.Parse).Skip(1);
var nAbs = n.Skip(1).Zip(n.Take(n.Count() - 1), (a, b) => Abs(a - b));
return new HashSet<int>(nAbs.Skip(1).Zip(nAbs.Take(nAbs.Count() - 1), (a, b) => Abs(a - b))).Count() == 1? "Jolly" : "Not Jolly";
}
}
def Jolly(Jollylist):
subs = []
for i in range(len(Jollylist)-1):
subs.append(abs(Jollylist[i] - Jollylist[i+1]))
judge = 0
for i in range(len(Jollylist)-1):
if sorted(subs)[i] == i+1:
judge += 1
if judge == len(Jollylist)-1:
return 'Jolly'
else:
return 'Not Jolly'
숏코딩을 고민해봐야겠습니다...
javascript
var isJolly = function(line) {
var input = line.split(" ");
var size = input[0] || 0;
if (size === 0) return;
return distancesOf(input.slice(1)).sort().every((v, i) => v === (i + 1));
};
var distancesOf = function(array) {
return Array.from(Array(array.length - 1), (v, i) => Math.abs(array[i + 1] - array[i]))
}
console.log(isJolly("4 1 4 2 3") ? "Jolly" : "Not Jolly");
console.log(isJolly("5 1 4 2 -1 6") ? "Jolly" : "Not Jolly");
def is_jolly(n, seq):
tups = list(zip(seq[:-1], seq[1:]))
diff = [abs(tup[0]-tup[1]) for tup in tups]
return sorted(diff) == list(range(1, n))
input = [[4, 1, 4, 2, 3], [5, 1, 4, 2, -1, 6]]
for seq in input:
if seq[0] == 0:
break
if is_jolly(seq[0], seq[1:]):
print('Jolly')
else:
print('Not jolly')
Python 3으로 풀었습니다.
def check_jolly_jumper(s):
items = [int(c) for c in s.split(' ')[1:]]
diffs_set = {abs(items[i - 1] - items[i]) for i in range(1, len(items))}
# print(diffs_set)
if len(diffs_set) == len(items) - 1\
and min(diffs_set) == 1\
and max(diffs_set) == len(items) - 1:
return 'Jolly'
else:
return 'Not jolly'
def jolly(list_a):
n = list_a[0]
a = [i for i in range(1,n)]
list_b = list_a[1:]
dff = []
for i in range(len(list_b)-1):
dff.append(abs(list_b[i]-list_b[i+1]))
sort_dff = sorted(dff)
if a == sort_dff:
print("Jolly")
else:
print("Not Jolly")
a = [4,1, 4, 2, 3]
b = [5, 1, 4, 2, -1, 6]
jolly(a)
jolly(b)
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, char* argv[])
{
if(argc <6 || atoi(argv[1]) != argc-2)
{
printf("input error\n");
return 0;
}
int arrcount = argc-2;
int arr[arrcount];
for(int i=0;i<arrcount;i++)
arr[i] = atoi(argv[i+2]);
/*
for(int i=0;i<arrcount;i++)
printf("%d ",arr[i]);
*/
//---------------------------------------
int tmparr[arrcount-1];
int flag = 0;
for(int i=0;i<arrcount-1;i++)
tmparr[i] = abs(arr[i+1]-arr[i]);
for(int i=0;i<arrcount-1;i++)
printf("%d ",tmparr[i]);
printf("\n");
int tmp = 0;
for(int i=0;i<arrcount-2;i++)
{
// tmparr check !
if(i==0)
tmp = tmparr[i+2] - tmparr[i+1];
else if(i>0)
{
int tmp2 = tmparr[i+2] - tmparr[i+1];
if(tmp-tmp2==1)
tmp = tmp2;
else
{
printf("Not Jolly\n");
return 0;
}
}
}
printf("Jolly\n");
}
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, char* argv[])
{
if(argc <6 || atoi(argv[1]) != argc-2)
{
printf("input error\n");
return 0;
}
int arrcount = argc-2;
int arr[arrcount];
for(int i=0;i<arrcount;i++)
arr[i] = atoi(argv[i+2]);
/*
for(int i=0;i<arrcount;i++)
printf("%d ",arr[i]);
*/
//---------------------------------------
int tmparr[arrcount-1];
int flag = 0;
for(int i=0;i<arrcount-1;i++)
tmparr[i] = abs(arr[i+1]-arr[i]);
for(int i=0;i<arrcount-1;i++)
printf("%d ",tmparr[i]);
printf("\n");
int tmp = 0;
for(int i=0;i<arrcount-2;i++)
{
// tmparr check !
if(i==0)
tmp = tmparr[i+2] - tmparr[i+1];
else if(i>0)
{
int tmp2 = tmparr[i+2] - tmparr[i+1];
if(tmp-tmp2==1)
tmp = tmp2;
else
{
printf("Not Jolly\n");
return 0;
}
}
}
printf("Jolly\n");
}
def jollyCh(nums):
nums = nums.split(' ')
check_arr = []
for idx, num in enumerate(nums) :
if idx == (len(nums)-1):
break
check_arr.append(abs(int(nums[idx+1])-int(num)))
print(check_arr)
for num in check_arr:
if num>(len(nums)-1) or num <1:
return 'Not Jolly'
return 'Jolly'
print(jollyCh('4 1 4 2 3'))
print(jollyCh('5 1 4 2 -1 6'))
package codingdojang;
import java.util.Scanner;
public class ex37 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String parse[] = sc.nextLine().split(" ");
int num[] = new int[parse.length];
for(int i=0; i<parse.length; i++) {
num[i] = Integer.parseInt(parse[i]);
}
for(int i=1; i<num.length; i++) {
if(num[i] - num[i-1] >= num.length) {
System.out.println("Not Jolly");
return;
}
}
System.out.println("Jolly");
}
}
n=str(input())
f=n.split(' ')
c=int(f.pop(0))
result=[]
for x in range(c-1):
d=abs(int(f[x+1]))-abs(int(f[x]))
result.append(abs(d))
jol=[y for y in range(1,c)]
result.sort()
if result==jol:
print('Jolly')
else:print('Not jolly')
import java.util.ArrayList; import java.util.Scanner;
public class test {
public static void main(String[] argv) {
Scanner sc = new Scanner(System.in);
boolean isJolly = true;
int n = sc.nextInt();
ArrayList<Integer> numList = new ArrayList<Integer>();
for(int i = 0; i < n; i++){
numList.add(sc.nextInt());
}
for(int i = 0; i < numList.size() - 1 ; i++){
if(!numList.contains(Math.abs(numList.get(i) - numList.get(i+1)))){
isJolly = false;
break;
}
}
if(isJolly){
System.out.print("Jolly");
}else{
System.out.print("Not jolly");
}
}
}
while True:
nums=list(map(int, input().split()))
if len(nums)>nums[0]:
nums=nums[1:nums[0]+1]
nums=list(zip(nums,nums[1:]))
break
diff=set([i for i in range(1, len(nums)+1)])
diffs=set([abs(x-y) for x,y in nums])
if diff-diffs:
print('Not jolly')
else:
print('Jolly')
예전에 본 lv1문제에서 어떤분이 zip쓰셨던게 기억나서 zip써봤습니다.
while True:
nums=list(map(int, input().split()))
if len(nums)>nums[0]:
nums=nums[1:nums[0]+1]
nums=list(zip(nums,nums[1:]))
break
diff=set()
for x,y in nums:
if abs(x-y) in diff:
print('Not jolly')
break
else:
diff.add(abs(x-y))
else:
print('Jolly')
다른분 하신거 보다가 첫번째코드처럼 하면 비교해야 할 숫자가 많으면 비효율적이라고 하시던데 맞는말인거 같아서 수정했습니다.
input = '''4 1 4 2 3
5 1 4 2 -1 6'''
input = input.split('\n')
for i in range(len(input)):
input = input[i]
input = input.split()
n = int(input.pop(0))
if n - 1 == len([i for i in range(len(input)-1) if abs(int(input[i])-int(input[i+1])) < n]):
print('Jolly')
else:
print('Not jolly')
파이썬 입니다.
#data
data1 = [1, 4, 2, 3]
data2 = [1, 4, 2, -1, 6]
#main
def jolly(data):
diffs = set()
for i in range(len(data) -1):
diffs.add(abs(data[i]- data[i+1]))
return "Jolly" if diffs == set(range(1, len(data))) else "Not Jolly"
print(jolly(data1))
print(jolly(data2))
파이썬 3.6
# 수열을 리스트 자료형으로 입력 받습니다.
def inputdata(sequencelist):
try:
n = input(" ▶ 수열의 개수 n을 입력하세요 :")
x = [input() for i in range(int(n))]
x.insert(0,n)
sequencelist.append(x)
inputdata(sequencelist)
except ValueError:
print("정수를 입력하세요","\n")
# 각 수열별로 조건에 맞는지 확인하여 결과를 출력 합니다.
def isjolly(sequencelist):
for sequence in sequencelist:
print(' '.join(sequence))
print("\n")
sub = 0
string =''
for sequence in sequencelist:
n = int(sequence[0])
if n == 0:
print(sequence[0])
return
elif n == 1: print("Not jolly")
else:
for i,value in enumerate(sequence[1:]):
if i+2 > n: pass
elif value == '':
print("Not jolly")
string = 'Not jolly'
break
else:
sub = abs(int(value)-int(sequence[i+2]))
if not str(sub) in sequence[1:n+1]:
print("Not jolly")
string = 'Not jolly'
break
if string == 'Not jolly':
string = ''
pass
else:
print("Jolly")
if __name__ == "__main__":
sequencelist = []
try:
n = input(" ▶ 수열의 개수 n을 입력하세요 :")
x = [input() for i in range(int(n))]
x.insert(0,n)
sequencelist.append(x)
inputdata(sequencelist)
print("==Jolly Jumpers!==")
print("\n")
isjolly(sequencelist)
except ValueError:
print("정수를 입력하세요","\n")
*결과값
▶ 수열의 개수 n을 입력하세요 :4
1
4
2
3
▶ 수열의 개수 n을 입력하세요 :5
1
4
2
-1
6
▶ 수열의 개수 n을 입력하세요 :0
▶ 수열의 개수 n을 입력하세요 :4
5
6
2
4
▶ 수열의 개수 n을 입력하세요 :
정수를 입력하세요
==Jolly Jumpers!==
4 1 4 2 3
5 1 4 2 -1 6
0
4 5 6 2 4
Jolly
Not jolly
0
import java.util.Scanner;
public class Search
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int num = input.nextInt();
int[] store = new int[num];
int[] tf = new int[num-1];
for(int i=0; i<num; ++i)
store[i] = input.nextInt();
for(int i=0; i<store.length-1; ++i)
{
int abs = Math.abs(store[i]-store[i+1]);
for(int j=0; j<store.length; ++j)
{
if(abs == store[j])
{
tf[i] =1;
break;
}
}
}
for(int i=0; i<tf.length; ++i)
{
if(tf[i] != 1)
{
System.out.println("Not Jolly");
break;
}
if(i == tf.length-1 && tf[i] == 1)
System.out.println("Jolly");
}
}
}
# 파이썬
def jolly_jumpers(i):
i = i.split(" ")
for m in range(1, int(i[0])):
i[m] = abs(int(i[m]) - int(i[m+1]))
set1 = set(range(1, int(i[0])))
set2 = set(i[1:-1])
if set1 == set2:
return "Jolly"
else:
return "Not jolly"
while 1:
input_sample = input("n, n개의 수, 사이는 blank, 종료는 0: ")
if input_sample == "0":
break
print(jolly_jumpers(input_sample))
def jolly(a):
n = a[0]
a = a[1:]
b = list()
for i in range(len(a)-1):
b.append(abs(a[i+1]-a[i]))
b.sort()
return b == list(range(1,n))
if jolly(list(map(int, input().split(' ')))):
print("Jolly")
else:
print("Not Jolly")
flag_list=[]
num_line=int(input("입력하려는 라인의 갯수를 입력하세요\n"))
for line in range(num_line):
num=input('숫자를 입력하세요\n')
num_list=num.split(" ")
check_set=set()
for k in range(1,int(num_list[0])):
check_set.add(k)
difference_set=set()
for g in range(len(num_list[1:])-1):
difference=abs(int(num_list[1:][g])-int(num_list[1:][g+1]))
difference_set.add(difference)
difference_set=set(difference_set)
for number in check_set:
if number not in difference_set:
flag_list.append(1)
break
if len(flag_list)!=(line+1):
flag_list.append(0)
for flag in flag_list:
if flag==0:
print("Jolly")
else:
print("Not jolly")
import java.util.Arrays;
import java.util.Scanner;
public class JollyJumpers {
public static boolean execute(int[] array){
int[] array2 = new int[array.length-1];
for(int i=0; i< array.length-1; i++){
array2[i] = Math.abs(array[i] - array[i+1]);
}
Arrays.sort(array2);
int check = 1;
for(int i=0; i < array2.length; i++){
if(array2[i] != check){
return false;
}
check++;
}
return true;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] array = new int[n];
for(int i = 0; i< n; i++){
array[i] = sc.nextInt();
}
sc.close();
System.out.println(execute(array) ? "Jolly" : "Not jolly");
}
}
import numpy as np
a = input()
b= []
a_list = []
a = a.split()
print(a)
c = a[0]
c = int(c)
for i in range(c):
b.append(a[i+1])
for i in range(len(b)-1):
a_list.append(i+1)
for i in range(len(b)-1):
try:
a_list.remove(abs(int(b[i]) - int(b[i+1])))
except:
continue
if a_list == []:
print("Jolly")
else:
print("Not jolly")
python 3+
nums_txt = '4 1 4 2 3'
def is_jolly(input_num):
l = [int(n) for n in input_num.split(' ')]
l2 = l[1:]
print(l2)
for n in range(len(l2) - 1):
m = abs(l2[n] - l2[n + 1])
print(m)
if l2.count(m) == 0:
return 'Not jolly'
return 'Jolly'
print(is_jolly(nums_txt))
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String [] arr1 = input.split(" ");
int count=0,sum;
if(arr1[0].equals("0")==false){
for(int i =0; i<input.length();i++){
if(input.substring(i,i+1).equals(" "))
count++;
}
int [] arr2 = new int [count];
sum = count;
for(int j=0 ;count>0 ;j++){
int a =Math.abs(Integer.parseInt(arr1[j])-Integer.parseInt(arr1[j+1]));
if(a>count)
break;
else{
arr2[a-1] = a;
count--;
}
}
for(int k=0;k<sum;k++){
if(arr2[k]==(k+1))
count++;
else
break;
}
if(count==sum)
System.out.println("Jolly");
else
System.out.println("Not jolly");
}
}
}
// Jolly Jumpers
package main
import (
"bufio"
"fmt"
"math"
"os"
"reflect"
"sort"
"strconv"
"strings"
)
// getDiffSlice: 슬라이스 멤버의 숫자 차이로 구성된 슬라이스(sorted) 반환
func getDiffSlice(iSlice []int) []int {
rst := []int{}
for i := 0; i < len(iSlice)-1; i++ {
rst = append(rst, int(math.Abs(float64(iSlice[i]-iSlice[i+1]))))
}
sort.Ints(rst)
return rst
}
// isJolly: if aSlice == range [1..num) -> "Jolly" else "Not Jolly"
func isJolly(aSlice []int, num int) string {
cmpSlice := []int{}
for i := 1; i < num; i++ {
cmpSlice = append(cmpSlice, i)
}
rst := "Not Jolly"
if reflect.DeepEqual(aSlice, cmpSlice) {
rst = "Jolly"
}
return rst
}
// parseInput
func parseInput() string {
var iString, rst string
for {
// read a string line
reader := bufio.NewReader(os.Stdin)
iString, _ = reader.ReadString('\n')
iString = strings.TrimSpace(iString)
// split the string to a slice
tmp := strings.Split(iString, " ")
num, _ := strconv.Atoi(tmp[0])
if num == 0 {
break
}
aSlice := []int{}
for _, v := range tmp[1:] {
v2i, _ := strconv.Atoi(v)
aSlice = append(aSlice, v2i)
}
// check if Jolly Jumber
rst = rst + isJolly(getDiffSlice(aSlice), num) + "\n"
}
return rst
}
func main() {
fmt.Println(parseInput())
}
파이썬 3
datas = []
while True:
inp = list(map(int,input('수열을 입력하세요(n a1 a2 a3 ... an) : ').split()))
if inp[0] == 0:
break
datas.append(inp)
for data in datas:
n = data.pop(0)
if n != len(data):
print('길이를 잘못 입력하셨습니다.')
else:
subs = [abs(data[i] - data[i + 1]) for i in range(n-1)]
print('Jolly' if set(subs) == set(range(1, n)) else 'Not Jolly')
def jolly(mylist):
n = mylist.pop(0)
if n == 0 : return 0
chalist = []
for i in range(1,len(mylist)):
if mylist[i] - mylist[i - 1] > 0 : chalist.append(mylist[i] - mylist[i-1])
else : chalist.append((mylist[i] - mylist[i-1]) * (-1))
if sorted(chalist) == list(range(1,n)) : return "Jolly"
else: return "not jolly"
print(jolly([4, 1, 4, 2, 3]))
print(jolly([5, 1, 4, 2, -1,6]))
print(jolly([0, 1, 4, 2, -1,6]))
let al = [4,1,4,2,3]
let bl = [5,1,4,2,-1,6]
function cal (x) {
let list = []
let i = 1;
while (i+1 < x.length){
// console.log("i", i, "list",list)
list.push(Math.abs(x[i+1] - x[i]))
i++
}
list.sort().unshift(x[0])
// console.log(list)
return list
}
function match (x) {
let judge = 0;
for ( let i = 1; i < x.length; i++){
x[i] === i ? "" : judge++;
// console.log("judge", judge)
}
return judge === 0 ? true : false
}
function jolly (x) {
if (x[0] !== 0) {
return match(cal(x))
} else { return "no element"}
}
console.log(jolly(al))
console.log(jolly(bl))
def Jolly(*nums):
subtract = abs(nums[0] - nums[1])
for i, minus in enumerate(nums[1:-1]):
if abs(minus - nums[i + 2]) == subtract - 1: subtract -= 1
else: return 'Not jolly'
return 'Jolly'
Python 3이고 수열의 길이를 나타내는 첫 번째 수는 입력하지 않는다고 가정했습니다
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); // 배열길이 입력받음
boolean[] sequence = new boolean[n];
String[] nums = br.readLine().split(" ");
for (int i=0, j=1; i<n-1; i++, j++) {
int idx = Integer.parseInt(nums[i]) - Integer.parseInt(nums[j]); // 등차 계산
if(Math.abs(idx) < n)
sequence[Math.abs(idx)] = true; // 등차번째 boolean 배열을 true로함
}
for (int i=1; i<n; i++) { // 등차가 0은 없으니 1부터
if(!sequence[i]) { // 하나라도 false면 등차가 1~n-1까지 꽉차있지 않다는 뜻
System.out.println("not jolly");
break;
}
else if(sequence[i] && i == n-1)
System.out.println("jolly");
}
System.out.println(Arrays.toString(sequence));
}
코드가 좀 기네요
``````{.java}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); // 배열길이 입력받음
boolean[] sequence = new boolean[n];
String[] nums = br.readLine().split(" ");
for (int i=0, j=1; i<n-1; i++, j++) {
int idx = Integer.parseInt(nums[i]) - Integer.parseInt(nums[j]); // 등차 계산
if(Math.abs(idx) < n)
sequence[Math.abs(idx)] = true; // 등차번째 boolean 배열을 true로함
}
for (int i=1; i<n; i++) { // 등차가 0은 없으니 1부터
if(!sequence[i]) { // 하나라도 false면 등차가 1~n-1까지 꽉차있지 않다는 뜻
System.out.println("not jolly");
break;
}
else if(sequence[i] && i == n-1)
System.out.println("jolly");
}
System.out.println(Arrays.toString(sequence));
}
자바입니다. 코드가 좀 기네요
def isJollyJumpers(string):
lst = []
operands = string.split()
length_of_string = int(operands[0])
if length_of_string == 0:
return '0'
else:
for number in operands[1:]:
number_2 = int(number)
lst.append(number_2)
for idx in range(1,len(lst)):
lst[idx] = lst[idx] - lst[0]
lst[0] = 0
for number in lst:
if abs(number) > length_of_string - 1:
return 'not jolly jump.'
break
else:
if number == lst[-1]:
return 'jolly jump.'
print(isJollyJumpers('4 1 4 2 3')) # 0 3 1 2
print(isJollyJumpers('5 1 4 2 -1 6')) # 0 3 1 -2 5
print(isJollyJumpers('7 1 4 7 5 4 2')) # 0 3 6 4 3 1
import java.util.Scanner;
public class T {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("수열 수 입력:");
String temp =in.nextLine();
String[] t= temp.split(" ");
int[] arr= new int[t.length];
for(int i=0;i<t.length;i++){
arr[i]=Integer.parseInt(t[i]);
}
int base=arr[0]-1;
String result="jolly";
for(int i=1;i<arr.length-1;i++){
int cal = 0;
if(arr[i]>arr[i+1]){
cal=arr[i]-arr[i+1];
}else{
cal=arr[i+1]-arr[i];
}
if(base!=cal){
result="Not jolly";
}
base-=1;
}
System.out.println(result);
}
}
python 3.6.4
def jollyjump(num):
numdiff = []
for x,y in zip(num[1:], num[2:]):
numdiff.append(abs(y-x))
if set(numdiff) == set(range(1, max(num[1:]))):
print('jolly')
else:
print('not jolly')
Python
test = [[4, 1, 4, 2, 3], [5, 1, 4, 2, -1, 6]]
for t in test:
n = t[0]
ori_list = t[1:]
cmp_list = list()
for i in range(n-1):
cmp_list.append(abs(ori_list[i]-ori_list[i+1]))
cmp_list = sorted(set(cmp_list))
if cmp_list == list(range(1, n)):
print("Jolly")
else:
print("Not jolly")
#include<iostream>
using namespace std;
int main()
{
int size;
cout << "수열의 갯수를 입력하시오>>";
cin >> size;
int *p = new int[size];
bool *v = new bool[size];
for (int i = 0; i < size; i++)
{
cin >> p[i];
if (p[0] == 0)
return 0;
}
for (int i = 0; i < size; i++)
{
v[size - p[i]] = true;
}
for (int i = 0; i < size; i++)
{
if (v[i] != true)
{
cout << "Not Jolly" << endl;
return 0;
}
}
cout << "Jolly" << endl;
delete[]p;
delete[]v;
}
파이썬 star expression을 얼마전에 알게돼서 한번 써봤습니다
# input
input1 = []
while(True):
n, *a= map(int,input().split())
if n == 0: break
input1.append([n, a])
# output
for n, a in input1:
b = [abs(a[i] - a[i + 1]) for i in range(n-1) ]
print("Jolly") if sorted(b) == list(range(1,n)) else print("Not Jolly")
// Jolly Jumper
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String st = sc.nextLine();
getJolly(st);
}
public static void getJolly(String st)
{
String[] stArr = st.split(" ");
int n = Integer.parseInt(stArr[0]);
int[] subtraction = new int[n];
int[] arr = new int[n];
int a;
for(int k = 0; k < n; k++) // readLine()으로 받은 수를 int형 배열에 저장
arr[k] = Integer.parseInt(stArr[k+1]);
for(int j = 1; j < n; j++) // 인접수 차 계산
{
subtraction[Math.abs(arr[j] - arr[j-1])]++;
}
for(a = 1; a < n; a++)
{
if(subtraction[a] != 1)
{
System.out.println("Not Jolly");
break;
}
}
if(a == n)
System.out.println("Jolly");
}
}
x = []
while 1:
x.append(tuple(map(int,input().split())))
if x[-1][0] == 0: x.pop(); break
for item in x:
if sorted(abs(item[i]-item[i+1]) for i in range(1,item[0])) == [j for j in range(1,item[0])]: print(item[1:],'Jolly',sep=' ▶▶▶ ')
else: print(item[1:],'Not jolly',sep=' ▶▶▶ ')
4 1 4 2 3
5 1 4 2 -1 6
0
(1, 4, 2, 3) ▶▶▶ Jolly
(1, 4, 2, -1, 6) ▶▶▶ Not jolly
jolly = list(map(lambda x : int(x) , input('Is it Jolly? : ').split()))
ans = []
for x in range(jolly[0]-1):
ans.append(abs(jolly[x+2]-jolly[x+1]))
if list(sorted(ans)) == list(range(1,jolly[0])):
print('JOLLY')
else:
print('NOT JOLLY')
package test;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] num = { 1, 4, 3, 6, 5, 2 };
Arrays.sort(num);
boolean a = true;
for (int i = 0; i < num.length; i++)
if (num[i] != num[num.length - 1] - (num.length - 1 - i))
a = false;
System.out.println(a ? "Jolly" : "Not jolly");
}
}
1부터 n-1까지의 값을 가지고 있어야한다는 점을 이용하여 소거법을 사용해서 만들어 보았습니다.
import math
def jolly(arr):
test = list(range(1,len(arr)))
for i in range(1,len(arr)):
res = abs(arr[i] - arr[i-1])
if res in test:
test.remove(res)
if test == []:
return True
else:
return False
s2 = [1,4,2,3]
s3 = [1,4,2,-1,6]
print (jolly(s2))
print (jolly(s3))
C#
using System;
using System.Linq;
namespace CD037
{
class Program
{
static void Main(string[] args)
{
string result = string.Empty;
while (true)
{
string input = Console.ReadLine();
if (IsParsable(input, out int[] anArray))
{
result += IsJolly(anArray) + Environment.NewLine;
}
else
{
Console.WriteLine(result);
break;
}
}
}
static bool IsParsable(string aString, out int[] parsed)
{
string[] inp = aString.Split();
int checkSize = int.Parse(inp[0]); // 입력 사이즈
parsed = new int[checkSize];
if (checkSize == 0) { return false; } // 입력 사이즈가 0인 경우 거짓 반환 |> 프로그램 종료
for (int i = 0; i < parsed.Length; i++)
{
parsed[i] = int.Parse(inp[i + 1]);
}
return true;
}
static string IsJolly(int[] anArray)
{
int[] cnvArray = new int[anArray.Length - 1];
for (int i = 0; i < anArray.Length - 1; i++)
{
cnvArray[i] = Math.Abs(anArray[i] - anArray[i + 1]);
}
Array.Sort(anArray); Array.Sort(cnvArray);
string result = "Not Jolly";
if (anArray.Take(anArray.Length - 1).SequenceEqual(cnvArray)) { result = "Jolly"; }
return result;
}
}
}
int main()
{
int test[1001] = { 0, }, n, ans[1001] = { 0, };
int result = 1;
cin >> n;
for (int i = 0; i < n; i++) cin >> test[i];
for (int i = 0; i < n - 1; i++) ans[abs(test[i] - test[i + 1]) - 1] ^= 1;
for (int i = 0; i < n - 1; i++) result &= ans[i];
result == 1 ? cout << "Jolly" : cout << "Not Jolly";
return 0;
}
def jolly_jumper(s) :
# 문자열 공백으로 분리
main_list = s.split(" ")
# 정수 개수
cnt = int(main_list.pop(0))
if cnt == 0 :
#0이면 종료
return "종료"
elif len(main_list)!=cnt :
# 숫자리스트가 주어진 개수와 같지 않으면 false
return "Not Jolly"
else :
# 1~n-1 리스트에 넣는다
num_list = [i for i in range(1, cnt)]
for i in range (0, len(main_list)-1) :
num = abs(int(main_list[i])-int(main_list[i+1]))
try :
# 앞 뒤 숫자 차의 절대값을 리스트에서 빼준다.
num_list.remove(num)
except :
return "Not Jolly"
return "Jolly"
se = input().split()
n = int(se[0])
r = list(map(int, se[1:])) # []로 감싸면 맵의 주소값 하나만 저장함;;;
if n > 1:
j = {x for x in range(1, n)}
z = zip(r[0:n-1], r[1:])
c = {abs(i-ii) for i, ii in z}
if j == c:
print("Jolly")
else:
print("Not Jolly")
from itertools import takewhile
while 1:
line = list(map(int, input().strip().split()))
n, i = line[0], line[1:]
if n == 0:
break
kijun = []
m = []
for k in range(1,n):
kijun.append(k)
for j in range(1,n):
m.append(abs(i[j-1]-i[j]))
s = list(takewhile(lambda x: kijun.count(x) != 0, m[0:]))
if len(s) == len(kijun):
print('Jolly')
else:
print('Not Jolly')
while 1:
line= list(map(int, input('입력:').split()))
if len(line[1:]) != line[0]:
print('수열의 개수가 맞지 않습니다.')
else: break
Check =line[1:]
lists=[i for i in range(1,line[0])]
result=[]
for j in range(1,len(Check)):
result.append(abs(Check[j-1]-Check[j]))
if sorted(result) == lists:
print('Jolly')
else: print('Not Jolly')
// 앞 자리 수 입력 안해도 됩니다. 자동으로 계산함.
public class KimSanghyeop {
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
System.out.println("수열을 입력하세요!");
String[] str_input = sc.nextLine().split(" ");
boolean[] res= new boolean[str_input.length-1];
String desc = "Jully";
int before, after;
for(int f1=0;f1<str_input.length-1;f1++)
{
before = Integer.valueOf(str_input[f1]);
after = Integer.valueOf(str_input[f1+1]);
try
{
res[Math.abs(after-before)-1]=true;
}
catch(Exception e)
{
desc = "Not Jully";
}
}
for(int f1=0;f1<res.length;f1++)
{
if(!res[f1])
{
desc = "Not Jully";
break;
}
}
System.out.println(desc);
}
}
def is_Jolly(numline):
temp = set()
for i in range(0, len(numline) - 1):
temp.add(abs(numline[i + 1] - numline[i]))
compareset = { i for i in range(1, len(numline)) }
if temp == compareset:
return 'Jolly'
else:
return 'Not Jolly'
result = []
while True:
jo = list( map(int, input().split()))
if jo[0] == 0:
break
elif jo[0] > 3000:
raise Exception('too large number')
else:
jo.pop(0)
result.append(jo)
for i in result:
print(is_Jolly(i))
set개념을 최대한 활용해서 구현해봤습니다. zip을 이용하면 더 간단히 할 수 있군요 배워 갑니다.
def JollyMachine():
while True:
input_list = list(map(int,input().split()))
# Check if input_number list's length is correct
# Exception error processing
numElem = len(input_list) - 1
out_number = (numElem != input_list[0])
out_range = (input_list[0] > 3000 or input_list[0] < 0)
exit_condition = (input_list[0] == 0)
if out_number or out_range:
print("Error!")
elif exit_condition:
print(input_list)
print("The program is ended.")
break
# print(input_list)
# Check this progression is Jolly or Not Jolly
cmp = len(set(list(range(1,numElem))) - set([abs(input_list[i] - input_list[i+1])
for i in range(1, numElem)]))
if cmp == 0:
print("Jolly")
else:
print("Not Jolly")
JollyMachine()
a=list(input().split(' '))
list1=[]
for x in range(1,int(a[0])):
list1.append([x])
list2=[]
for y in range(1,int(a[0])):
n=abs(int(a[y+1])-int(a[y]))
lists=[n]
list2.append(lists)
list2.sort()
if list2==list1:
print('Jolly')
else:
print('Not Jolly')
namespace codingdojang__
{
class Program
{
static void Main(string[] args)
{
Jolly_jumpers("4 1 4 2 3");
Jolly_jumpers("5 1 4 2 -1 6");
}
static void Jolly_jumpers(string input)
{
string[] sequence = input.Split(' ');
List<int> temp_list = new List<int> { };
List<int> ex_list = new List<int> { };
bool jolly = false;
for (int i = 1; i < int.Parse(sequence[0]); i++)
{
temp_list.Add(Math.Abs(int.Parse(sequence[i]) - int.Parse(sequence[i + 1])));
}
for (int i = 1; i < int.Parse(sequence[0]); i++)
{
ex_list.Add(i);
}
temp_list.Sort();
for (int i = 0; i < ex_list.Count(); i++)
{
if (temp_list[i] == ex_list[i])
{
jolly = true;
}
else if (temp_list[i] != ex_list[i])
{
jolly = false;
break;
}
}
Console.WriteLine(jolly ? "Jolly" : "Not Jolly");
}
}
}
def jolly():
num_list = input("수열을 입력하세요.").split()
num_list_len = len(num_list)
total_list = list()
for a in range(1,num_list_len):
total_list.append(a)
total_list.sort()
subtract = list()
for x in range(num_list_len-1):
subtract.append(abs(int(num_list[x])-int(num_list[x+1])))
subtract.sort()
subtract_set = list(set(subtract))
subtract_set_len = len(subtract_set)
for i in range(subtract_set_len):
if total_list.count(subtract_set[i]) ==1:
a = True
else:
a = False
if len(total_list) == subtract_set_len and a ==True:
print("Jolly!")
else :
print("Not Jolly!")
#input = [4,1,4,2,3]
input = [5,1,4,2,-1,6]
jolList1 = []
jolList2 = []
n = int(input[0])
for i in range(1,len(input)-1):
jolList1.append(abs(input[i+1]-input[i]))
for j in range(1,n):
jolList2.append(j)
jolList1=set(jolList1)
jolList2=set(jolList2)
if jolList1 == jolList2:
print("Jolly")
else:
print("Not Jolly")
inpL=list(map(int,input().split()));qwe=[];n=inpL[0];del inpL[0]
for i in range(len(inpL)-1):
qwe.append(abs(inpL[i]-inpL[i+1]))
if sorted(qwe)==list(range(1,len(qwe)+1)):
print("Jolly")
else:
print("Not jolly")
n, *L = map(int, input().split())
J = {abs(L[i+1]-L[i]) for i in range(len(L)-1) }
N = set(range(1, n))
if J == N: print('Jolly')
else: print('Not Jolly')
4 1 4 2 3
Jolly
5 1 4 2 -1 6
Not Jolly
def isJolly(*nums):
for i in range(1, nums[0]):
if abs(nums[i]-nums[i+1]) != nums[0]-i: return False
return True
abs를 이용해봤습니다. 밑에는 풀이를 참고해봤습니다.
def isJolly2(jolly):
diff = [abs(x[0]-x[1]) for x in zip(jolly[1:], jolly[2:])]
return True if sorted(diff) == list(range(1, jolly[0])) else False
print("수열 입력 ( 수열의 첫 번쨰 수는 수열의 원소의 개수)")
a=list(input().split(' '))
i=0
while i<len(a):
a[i]=int(a[i])
i+=1
num=list(range(1,len(a)-1,1))
result=[]
j=1
while j+1<len(a):
if abs(a[j]-a[j+1]) in num:
result.append(abs(a[j]-a[j+1]))
j +=1
result.sort()
if result==num:
print("Jolly")
else:
print("Not jolly")
input1 = input("숫자를 입력하세요 : ")
input1 = input1.split(" ")
input1_num = input1[1:]
count = 0
list1 = []
for i in range(len(input1_num) - 1):
diff = abs(int(input1_num[i]) - int(input1_num[i + 1]))
list1.append(diff)
for j in range(1,int(input1[0])):
if list1.count(j) > 0:
count += 1
if count == int(input1[0]) - 1:
print("Jolly")
else:
print("Not Jolly")
def fun(L):
count = 0
for i in range(len(L)-1):
if abs(L[i]-L[i+1]) in L:
count+=1
else :
break
if count == len(L)-1 :
print("Jolly")
else :
print("Not Jolly")
L1 = [4,1,4,2,3]
L2 = [5,1,4,2,-1,6]
fun(L1)
fun(L2)
import java.util.; import java.lang.; public class JollyJumpers {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] lines = scan.nextLine().split(" ");
int[] nums = Arrays.stream(lines).mapToInt(Integer::parseInt).toArray();
int[] count = new int[nums[0]];
if(lines[0].equals("0")) {
System.out.println("종료");
System.exit(0);
}
for(int i=0; i<nums[0]; i++) {
count[i] = i;
}
int[] sums = new int[nums[0]];
sums[0] = 0;
for(int j=1; j<nums.length-1; j++) {
sums[j] = Math.abs(nums[j+1]-nums[j]);
}
Arrays.sort(sums);
if(Arrays.equals(count, sums)) {
System.out.println("Jolly");
}
else {
System.out.println("Not Jolly");
}
}
}
jolly=input().split(' ')
a=len(jolly)
Sum=[]
y=[]
for i in range(1,len(jolly)-1):
Sum.append(abs(int(jolly[i])-int(jolly[i+1])))
for x in range(1,a-1):
y.append(x)
Sum.sort()
y.sort()
if Sum == y:
print('jolly')
else:
print('Not jolly')
check = True
testlist = list()
while(True):
while(True):
N = list(map(int,input().split()))
NM = N.pop(0)
if NM == len(N):
break
if NM == 0:
break
for i in range(len(N)-1):
if N[i] - N[i+1] < 0:
testlist.append((N[i] - N[i+1])*-1)
elif N[i] - N[i+1] >= 0:
testlist.append(N[i]-N[i+1])
for j in range(len(testlist)-1):
if testlist[j] - testlist[j+1] != 1 and testlist[j] - testlist[j+1] != -1:
check = False
if check == True:
print("Jolly")
elif check == False:
print("Not jolly")
check = True
testlist = list()
import java.util.Scanner;
import java.util.ArrayList;
public class JollyJumpers {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> al = new ArrayList<Integer>();
JollyJumpers jj = new JollyJumpers();
int count = 0;
boolean run = true;
while(run) {
System.out.print("숫자를 입력하시오: ");
String str = sc.nextLine();
int[] numArray = jj.Sort(str);
if(numArray[0]== 0) {
System.out.println("프로그램 종료");
break;
}
for(int i =1; i<numArray.length-1; i++) { //두 정수의 차이값 구하기(양수일때)
if(numArray[i+1] - numArray[i] > 0) {
al.add(i-1, (numArray[i+1]-numArray[i]));
} else { //두 정수의 차이값 구하기(음수일때)
al.add(i-1, (numArray[i]-numArray[i+1]));
}
}
for(int j = 0; j<al.size()-1; j++) { //차이가 1일때 count 증가
if(al.get(j)-1 == al.get(j+1)) {
count++;
}
}
if(count == numArray[0]-2) { //count가 n-2개일 때 Jolly
System.out.println("Jolly");
} else {
System.out.println("Not Jolly");
}
count = 0;
al.clear();
}
}
public int[] Sort(String str) {
String[] Array = str.split(" ");
int[] numArray = new int[Array.length];
for(int i =0; i<numArray.length; i++) {
numArray[i]=Integer.parseInt(Array[i]);
}
return numArray;
}
}
ArrayList를 이용하여 차이값이 1일때의 갯수를 구한뒤 n-2개가 맞는지 확인했습니다.
def J_J(inp) :
if inp[0] != len(inp)-1 :
return "Error!"
else :
bt = set(map(lambda x : abs(x[0]-x[1]), zip(inp[1:], inp[2:])))
if bt == set(range(1, inp[0])) :
return "Jolly"
else :
return "Not jolly"
if __name__ == '__main__' :
print(J_J(list(map(int, input("INPUT : ").split()))))
결과
INPUT : 4 1 4 2 3
Jolly
INPUT : 5 1 4 2 -1 6
Not jolly
def is_jolly(nums):
diff = [abs(a - b) for a, b in zip(nums, nums[1:])]
jolly = [i for i in range(1,n)]
diff.sort()
jolly.sort()
if diff == jolly:
print('jolly')
else:
print('not jolly')
while 1:
line = list(map(int, input().strip().split()))
n, nums = line[0], line[1:]
if n == 0:
break
print(is_jolly(nums))
a = input("수를 입력: ").split()
b = list(map(int, a))
m = set(range(1, len(b)-1))
c = set()
for i in range(1, len(b)-1):
n = abs(b[i]-b[i+1])
c.add(n)
if m == c:
print("jolly")
else:
print("Not jolly")
import numpy as np
n, *a = map(int, input().split())
a = np.array(a)
a = n - a
a = sorted(a)
if list(range(n)) == a:
print("Jolly")
else:
print("Not Jolly")
import numpy as np
arr1 = []
n, *a = map(int,input().split())
arr1 = n - np.array(a)
if sorted(range(0,n)) == sorted(arr1):
print("Jolly")
else:
print("Not Jolly")
파이썬 입니다.
while True:
ui = str(input("입력하시오: ")).split(' ')
if int(ui[0]) == 0:
break
elif int(ui[0]) < 1:
print("숫자의 갯수는 0개 이상 입력이 필요 합니다.")
continue
if int(ui[0]) != len(ui) - 1:
print("숫자의 갯수와 입력하신 갯수가 일치하지 않습니다.")
continue
ui_set = set()
tar = set(range(1, int(ui[0])))
pre_val = int(ui[1])
for i in range(2, len(ui)):
ui_set.add(abs(pre_val-int(ui[i])))
if tar.__eq__(ui_set):
print("Jolly")
else:
print("Not jolly")
Jolly여부를 판단하는 함수를 생성 입력한 값을 기준으로 인접한 두수의 차를 구한 리스트와 1부터 입력된 수자리-1(n-1)의 리스트를 만든후 두개의 리스트를 정렬후 비교하여 일치하면 jolly, 일치하지 않으면 not jolly를 출력하게 함
def is_jolly(input_list):
comp_list = []
res_list = []
for i in range(1, int(input_list[0])):
comp_list.append(i)
for i in range(1, len(input_list)-1):
res_list.append(abs(int(input_list[i])-int(input_list[i+1])))
if sorted(comp_list)==sorted(res_list):
return True
else:
return False
while True:
input_list = input('숫자를 입력하세요: ').split()
if input_list[0]=='0':
print('종료합니다')
break
if is_jolly(input_list):
print('jolly')
else:
print('not jolly')
# 각 인접합 수의 차를 리스트 b에 기억시키고
# 1부터 n-1까지의 수가 리스트 b에 들어 있는지 체크하여
# Not Jolly 및 jolly 판별
a,b=str(input('Input numbers....')).split(' '),[]
if a[0]!='0':
for i in range (1,len(a)-1):
b.append(abs(int(a[i])-int(a[i+1])))
i=1
while (i<int(a[0])):
if i in b:
i+=1
elif i not in b:
print ('Not Jolly')
break
if i==int(a[0]):
print ('Jolly')
def jolly_jumper(sample_input, num_of_seq):
diff = {abs(a - b) for a, b in zip(sample_input, sample_input[1:])}
sample_output = 'Jolly' if (num_of_seq - 1) == len(diff) else 'Not jolly'
return sample_output
def main():
sample_input = [4, 1, 4, 2, 3]
num_of_seq, sample_input = sample_input[0], sample_input[1:]
sample_output = jolly_jumper(sample_input, num_of_seq) if num_of_seq != 0 else quit()
print(sample_output)
if __name__ == '__main__':
main()
list_a=input("수열 : ").split(" ")
jolly=[]
for i in range(len(list_a)-1,0,-1):
jolly.append(abs(int(list_a[i])-int(list_a[i-1])))
a=0
for i in range(0,len(jolly)):
if (i+1)!=jolly[i]:
a=1
if a==1:
print("Not jolly")
else:
print("jolly")
li=list(map(int,input('input number, 우선 배열갯수, 그다음부터 배열 : ').split()))
n=int(li.pop(0))
li2=[]
print(li)
for i in range(n-1):
li2.append(abs(li[i+1]-li[i]))
print(li2)
print(sorted(li2))
if sum(li2)==n*(n-1)/2:
print('jolly jump')
else:
print('non jolly')
n = int(input())
jolly = input().split(" ")
iff =[]
for i in range(1,n):
iff.append(i)
abss = []
for i in range(0,len(jolly)-1):
abss.append(abs(int(jolly[i+1])-int(jolly[i])))
if sorted(abss) == iff:
print("Jolly")
else:
print("Not Jolly")
numbers=list(map(int, input().strip().split()))
second=set([abs(a-b) for a, b in zip(numbers, numbers[1:])])
numbers.sort()
first=set(numbers[:-1])
print('Jolly' if first==second else 'Not Jolly')
파이썬3입니다.
numberList = list(map(int, input('input numbers with blank. ').split()))
lenList = numberList[0]
del numberList[0]
subNumber = [abs(numberList[x] - numberList[x - 1]) for x in range(1, len(numberList))]
print('Jolly Jumpers' if sum(subNumber) == sum([x for x in range(len(numberList))]) else 'Not jolly')
package test;
import java.util.*;
public class Test{
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.next());
int arr[] = new int[n]; // 입력값
int arr2[] = new int[n-1]; // 1~ n-1 값
int abs[] = new int[n-1]; //차의 절대값
for(int i = 0; i < n; i++) { //arr에 n개의 정수 삽입
arr[i] = Integer.parseInt(sc.next());
}
for(int i = 1; i<=arr2.length; i++)//arr2에 1~n-1 삽입
arr2[i-1] = i;
for(int i = 0; i<arr.length-1; i++) { //abs에 차 절댓값 삽입
abs[i] = Math.abs(arr[i]-arr[i+1]);
}
Arrays.sort(abs); //abs에 절댓값 차 정렬
for(int i = 0; i<arr2.length;i++) {
if(arr2[i] == abs[i]) {
if(arr2[i]==arr2[arr2.length-1]) {
System.out.println("Jolly");
break;
}
}
else if(arr[i] != abs[i]) {
System.out.println("Not jolly");
break;
}
}
sc.close();
}
}
temp = list(map(int,input().split(" ")))
jud = []
for i in range(1,len(temp)-1):
if abs(temp[i] - temp[i+1]) in temp:
jud.append(True)
else:
jud.append(False)
if False not in jud:
print("Jolly")
else:
print("Not jolly")
def jol(text):
args = text.split()
temp_max = int(max(args))
temp_1 = []
for i in range(1,temp_max):
temp_1.append(i)
temp_2 = []
for j in range(len(args)):
try:
sub = int(args[j]) - int(args[j+1])
if sub >= 0:
temp_2.append(sub)
else:
temp_2.append(-sub)
except: pass
print(temp_1, temp_2, list(set(temp_2)))
if temp_1 == list(set(temp_2)):
return print('JOLLY!')
else:
return print('NOT JOLLY')
jol('4 1 4 2 3')
jol('5 1 4 2 -1 6')
package main;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = 0;//수열의 범위를 지정
n = sc.nextInt();
int[] arData = new int[n];
int num = 0;
int[] temp = new int[n-1];
int[] jol = new int[n-1];
int Cnt = 0;
for (int i = 0; i < n; i++) {
num = sc.nextInt();
arData[i] = num;
}
for (int i = 0; i < temp.length; i++) {
if(0>arData[i]-arData[i+1]) {
temp[i] = -(arData[i]-arData[i+1]);
}else {
temp[i] = arData[i]-arData[i+1];
}
}
Arrays.sort(temp);
for (int i = 0; i < jol.length; i++) {
jol[i]=i+1;
if(jol[i]==temp[i]) {
Cnt++;
}
}
if(Cnt == n-1) {
System.out.println("Jolly");
}else {
System.out.println("Not Jolly");
}
}
}
def it_is_jolly_jumper(list):
if list[0]==0:
print("what???")
for_answer=[]
for i in range(1,list[0],1):
for_answer.append(i)
for i in range(1,list[0],1):
if abs(list[i+1]-list[i]) in for_answer:
for_answer.remove(abs(list[i+1]-list[i]))
if for_answer==[]:
return "Jolly"
else:
return "Not jolly"
print(it_is_jolly_jumper([4,1,4,2,3]))
print(it_is_jolly_jumper([5,1,4,2,-1,6]))
def jolly(x):
array = list(map(int,x.split()))
for i in range(1,array[0]):
if abs(array[i]-array[i+1]) not in array[1:]:
return 'not jolly'
return 'jolly'
def main():
arr = list(map(int,input().split()))
if arr[0] == 0:
print("end")
return 0
result = []
for i in range(1,arr[0]):
result.append(abs(arr[i+1] - arr[i]))
result = set(sorted(result))
jarr = set(list(range(1,arr[0])))
if(result == jarr):print("Jolly")
else: print("Not jolly")
main()
def jolly(num_list):
substract_list=[]
for n in range(1,len(num_list)):
substract_list.append(abs(num_list[n]-num_list[n-1]))
substract_set=set(substract_list)
if len(substract_set)==len(num_list)-1:
return 'Jolly'
else:
return 'not Jolly'
print(jolly([1,4,2,3]))
let inputAry=prompt('배열 입력','').split(' ');
let ary = inputAry.map((el)=>Number(el));
const num=ary[0];
let range=new Array(num);
let cnt =0;
ary.shift();
const result=ary.reduce((prev, cur)=>{
prev=Math.abs(prev-cur)
if(prev>=1 && prev<=num){
range[prev]='exist';
}
return cur
})
const count=range.map((el)=>el=='exist'&&cnt++);
cnt==(num-1)?document.write('Jolly'):document.write('notJolly')
a= list(input("수열의 갯수를 적고 숫자를 입력하세요 : ").split())
b = a.pop(0)
c = int(b)
count = 0
for i in range(len(a)):
c-=1
if b=='0':
print("0은 수행되지않습니다")
break
elif count==len(a)-1:
print("Jolly")
elif int(b) != len(a):
print(len(a))
print("수열의 갯수를 잘못적었습니다")
break
elif i==len(a)-1:
break
elif abs(int(a[i])-int(a[i+1]))==c and c!=-1:
count+=1
else:
print("Not jolly")
break
input_lst = list(map(int,(input().split(' '))))
lst = input_lst[1:]
output = []
for i in range(1, len(lst)):
output.append(abs(lst[i]-lst[i-1]))
output.sort()
check = [x for x in range(1, len(lst))]
if check == output:
print("Jolly")
else:
print('Not jolly')
# 빼기 함수
def sub(a, b):
return abs((b - a))
value = list(map(int, input("입력시킬 개수와 수열을 입력하세요 : ").split()))
n = value[0]
sequence = value[1:]
if n == 0:
print("프로그램을 종료합니다.")
elif n != len(sequence):
print("입력시킬 개수와 수열의 개수가 맞지 않습니다.")
else:
requirement = list(range(sequence[0],sequence[1]))
sublist = []
for i in range(len(sequence)):
subvalue = sub(sequence[i],sequence[i+1])
sublist.append(subvalue)
if i == len(sequence) - 2:
break
if list(set(sublist)) == requirement:
print("Jolly")
else:
print("Not jolly")
x=input('수열 입력')
xlist=x.split(' ')
n=int(xlist[0])
result=[]
compare=[]
for i in range(1,n):
compare.append(int(i))
for i in range(1,n+1):
if i != n :
result.append(abs(int(xlist[i]) - int(xlist[i+1])))
if sorted(result) == compare:
print('Jolly')
else:
print('Not Jolly')
def makeAns(str_):
list_ = [int(elem) for elem in str_.split(" ")]
list_.remove(list_[0])
list_2 = list(set([abs(list_[i] - list_[i+1]) for i in range(0, len(list_)-1)]))
list_2.sort()
if len(list_) == len(list_2) + 1:
str1 = "Jolly"
for i in range(0, len(list_2)-1):
if list_2[i+1] - list_2[i] != 1:
str1 = "Not Jolly"
break
print(str1)
else:
print("Not Jolly")
makeAns("4 1 4 2 3")
makeAns("5 1 4 2 -1 6")
결과
Jolly
Not Jolly
def check_Jolly(inp_list):
c=[]
for i in range(len(inp_list)-1):
c.append(abs(inp_list[i]-inp_list[i+1]))
return sorted(c)
s = list(map(int,(input().split())))
n = s[0]
c = check_Jolly(s[1:])
if c == list(range(1,n)):
print("Jolly")
else:
print("Not Jolly")
not jolly!
import random
def JJ(i):
if i >3000 : print('3천 이하 정수만 ㄱㄴ')
l=[i]
while len(l)<i :
r = random.randint(1,i)
l.append(r)
L = set(l)
if len(L)==i :
print('jolly!')
print(l)
else :
print('not jolly!')
JJ(i)
a = list(map(int,'5 1 4 2 -1 6'.split(' ')))
k = []
for (x,y) in zip(a[1:],a[2:]):
k.append(abs(y-x))
h = 0
for i in range(1,a[0]):
if i in k: h += 0
else: h += 1
if h> 0 : print("Not Jolly")
elif h == 0: print("Jolly")
#codingdojing_jollyjmp_re
# '012345' 와 같이 n-1개로 문자열이나 리스트 만든다
import sys
j_input = input("input(n i i i i...): ")
j_list = [int(x) for x in j_input.split()]
N = j_list[0] #number of integer
if N != len(j_list[1:]): #input error
print('numbers not matching')
sys.exit()
nums = [str(abs(j_list[i]-j_list[i+1])) for i in range(1, N)] #숫자들의 차이의 절대값 -> string
nums = ''.join(sorted(nums)) #nums.sort() 는 not iterable
jolly_num = ''.join(str(x) for x in range(1, N)) #"처음 숫자가 N이면, 1~n-1까지 숫자들을 string으로, 1234567"
if nums == jolly_num: print("Jolly")
else: print("Not Jolly")
## 다른 사람 풀이 참고해서 수정
j_input = input("input(n i i i i...): ")
j_list = [int(x) for x in j_input.split()]
N = j_list[0] #number of integer
if N != len(j_list[1:]): #input error
print('numbers not matching')
sys.exit()
nums = {abs(a-b) for a,b in zip(j_list[1:], j_list[2:])} # set으로 비교
if nums == set(range(1,N)): print("Jolly")
else: print("Not Jolly")
파이썬 3.8.10으로 작성했습니다.
def is_jolly_jumper(lst):
if lst[0] == 0:
return 0
else:
diff = []
for i in range(1, lst[0]):
diff.append(abs(lst[i] - lst[i + 1]))
if set(diff) == set(range(1, lst[0])):
print('Jolly')
else:
print('Not Jolly')
def main():
sample_input = [4, 1, 4, 2, 3]
is_jolly_jumper(sample_input)
if __name__ == '__main__':
main()
x=list(map(int,input().split()))
n=x.pop(0)
if n==0:
print(n)
elif set(range(1,n)) - {abs(x[i]-x[i-1]) for i in range(1,n)}:
print('Not Jolly')
else:
print('Jolly')
n = int(input("수열의 개수를 입력하세요"))
m = 0
arr =[]
input_arr =[]
arr1 = []
for i in range(1,n) :
arr.append(i)
while True :
a = int(input("정수를 입력해주세요"))
m +=1
input_arr.append(a)
if m ==n :
break
for i in range(len(input_arr)-1) :
arr1.append(abs(input_arr[i]-input_arr[i+1]))
if arr == arr1 :
print("Jolly")
else :
print("Not Jolly")
while True :
_input = input()
_input = _input.split()
_input = list(map(int,_input))
if _input[0] == 0 :
_input.pop(0)
print(_input)
break
else :
count = _input.pop(0)
minus_list = [ num for num in range(1,max(_input)-min(_input)+1)]
for i in range(0,count-1):
minus = abs( _input[i] - _input[i+1] )
if minus in minus_list : minus_list.remove(minus)
if minus_list : print("Not Jolly")
else : print("Jolly")
// Rust
// set을 만들어서 비교
use std::collections::HashSet; fn main() {
let mut vecs = vec![];
loop {
let mut input = String::new();
std::io::stdin()
.read_line(&mut input)
.expect("input error"); // /n포함
let vec: Vec<i32> = input.trim()
.split_whitespace()
.map(|s| s.parse::<i32>().unwrap())
.collect();
if vec[0] != 0 {
vecs.push(vec);
continue;
}
break;
}
for vec in vecs {
let n = vec[0];
let v = &vec[1..];
let mut set: HashSet<i32> = HashSet::new();
for i in 1..v.len() {
set.insert((v[i-1] - v[i]).abs());
}
if set == (1..n).collect() {
println!("Jolly");
} else {
println!("Not Jolly");
}
}
}
sample = '''4 1 4 2 3
5 1 4 2 -1 6 '''
def jol(a):
num_list = a.split(' ')
num_diff_list = [abs(int(num_list[x+1])-int(num_list[x])) for x in range(1, int(num_list[0]))]
if [x in num_diff_list for x in range(1, int(num_list[0]))].count(True) == int(num_list[0])-1:
return 'Jolly'
else:
return "Not Jolly"
[jol(x) for x in sample.split('\n')]
package org.javaturotials.ex;
import java.util.*;
import java.util.stream.Collectors;
public class test {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(true) {
int num = sc.nextInt();
int sum=0;
int[] arr = new int[num];
int[] count = new int[num + 1];
for(int i=0; i<num; i++) {
arr[i] = sc.nextInt();
}
for(int i=0; i<(arr.length)-1; i++) {
int t = Math.abs((arr[i]-arr[i+1]));
if(t<=num-1) {
count[t]++;}
}
for(int i=0; i<count.length; i++) {
if(count[i]!=0) {
sum++;}
}
if(sum==(num-1)) {
System.out.println("Jolly");
}
else {
System.out.println("Not Jolly");
}
}
}
}
def jollyJumpers():
nlist = list(map(int, input("jolly jumper 를 찾기 위한 n개의 정수를 입력 하시오").split()))
abslist = []
if nlist[0] <= 3000 and nlist[0] > 1:
for i in range(1, nlist[0]):
abslist.append(abs(nlist[i] - nlist[i+1]))
abslist.sort(reverse=True)
n = nlist[0] - 1
for j in abslist:
if n == j:
n -= 1
else:
return 'Not jolly'
return 'Jolly'
jollyJumpers()
Input = input("수열의 갯수와 숫자를 입력하세요. : ").split()
c = int(Input[0])
n = Input[1:]
n1 = []
count = 0
while count < c-1:
n1.append(abs(int(n[count]) - int(n[count + 1])))
count += 1
if c == 0:
print('0')
elif list(range(1,c)) == sorted(n1):
print('Jolly')
else:
print('Not jolly')
a = list(map(int,input().split()))
b=[]
c=[]
if int(a[0]) != (len(a)-1):
print('올바른 값 입력')
exit()
for i in range(len(a)-2):
b.append(abs(a[i+1]-a[i+2]))
for j in range(len(a)-2):
c.append(j+1)
b.sort()
if b==c:
print('Jolly')
else:
print('Not Jolly')
a = input("수열의 갯수와 정수를 입력하세요, ex)첫번째 입력인 4 1 4 2 3 의 맨 앞의 4는 뒤에 4개의 숫자가 온다는 것을 의미")
b = a.split(" ")
b_int = list(map(int, b))
cnt = b_int.pop(0)
k = []
for i in range(cnt-1): #0 1 2 3
k.append(abs(b_int[i]-b_int[i+1]))
k.sort()
T = []
for i in range(1,cnt):
T.append(i)
if T == k:
print("Jolly")
else:
print("Not Jolly")
data = list(map(int,input(">").split()))
rest = []
fst_num = data[0]
del data[0]
if fst_num != len(data):
print("NOT Jolly")
exit()
else:
for i in range(len(data)-1):
if abs(data[i+1]-data[i]) in data:
rest.append('J')
else:
rest.append('N')
if 'N' in rest:
print('NOT JOLLY')
else:
print('JOLLY')
def isJollyJump(prob):
res = set()
for i in range(1, len(prob)):
res.add(abs(prob[i-1]-prob[i]))
return res == set(range(1, len(prob)))
prob = []
while True:
p = [ int(x) for x in input('>>> ').split()]
if p[0]==0:
break
prob.append(p[1:])
for p in prob:
print(isJollyJump(p))
JAVA입니다.
package question3.jolly_jumpers;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Hashtable<Integer, Boolean> hasNumber = new Hashtable<Integer, Boolean>();
List<Boolean> isJollyList = new ArrayList<Boolean>();
while(true) {
String[] input = sc.nextLine().split(" ");
int length = Integer.parseInt(input[0]);
if(length == 0) {
break;
}
int[] numbers = new int[length];
for (int i = 0; i < length; i++) {
numbers[i] = Integer.parseInt(input[i+1]);
}
for (int i = 1; i < length; i++) {
int diff = Math.abs(numbers[i] - numbers[i-1]);
hasNumber.put(diff, true);
}
boolean isJolly = true;
for (int i = 1; i < length; i++) {
if(!hasNumber.containsKey(i)) {
isJolly = false;
}
}
isJollyList.add(isJolly);
}
for (Boolean bool : isJollyList) {
System.out.println((bool) ? "Jolly" : "Not jolly");
}
}
}