Jolly Jumpers

출처 : 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
구현
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

7개의 풀이가 있습니다.

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);

    }
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
    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;

    }

2016/04/16 19:45

xeo

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

//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();
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
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");
        }

    }
}




※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

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;
        }


    }

}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
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);       
    }
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

구현 x 2
연관 문제

언어별 풀이 현황
전 체 x 39
python x 22
기 타 x 4
clojure x 1
java x 7
cs x 2
ruby x 1
cpp x 1
matlab x 1