💻 Algorithm/Baekjoon

[JAVA] 백준 4383 - 점프는 즐거워

dlalwl_jpg 2022. 8. 12. 18:27

 실버V

https://www.acmicpc.net/problem/4383

 

4383번: 점프는 즐거워

Jolly jumper라 불리는 수열이 있다. 길이가 1인 수열은 무조건 Jolly jumper이고, 길이가 2이상일 때는 n개의 연속된 두 수의 차의 절댓값이 1부터 n-1까지 모두 나와야 Jolly jumper라고 한다. 예를 들어 1 4

www.acmicpc.net

문제

Jolly jumper라 불리는 수열이 있다. 길이가 1인 수열은 무조건 Jolly jumper이고, 길이가 2이상일 때는 n개의 연속된 두 수의 차의 절댓값이 1부터 n-1까지 모두 나와야 Jolly jumper라고 한다. 예를 들어

1 4 2 3

이것은 Jolly jumper인데, 두 수의 차의 절댓값이 각각 3,2,1이기 때문이다. 하여튼 조건을 충족하면 어느 수열이든 Jolly jumper라 할 수 있다. 이제 각 케이스마다 Jolly jumper인지를 판별하자.


입력

각 줄의 첫 수로 n이 주어진다.(n < 3000) 그 다음에는 n개의 수가 주어진다.


출력

각 줄마다 Jolly 인지 Not jolly 인지 출력한다.


접근방법

우선 이웃하는 값끼리 뺀 값을 저장하는 배열1과 1부터 n-1까지 저장하는 배열2를 만든다음

두 배열끼리 비교하여 배열1의 값이 배열2에 있으면 배열2에서 하나씩 제거하는 방식으로 jolly를 판별하였다.


코드

package bj4383;

import java.util.Scanner;

public class bj4383 {

	public static void main(String[] args){
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		while(sc.hasNext()) { //EOF면 종료
			//입력할 숫자 개수 입력
			int n = sc.nextInt();
			int[] arr = new int[n];
			int[] array = new int[n];
			int[] num = new int[n - 1];
			int index = 0;
			int check = 0;
			
			//숫자 입력
			for(int i = 0; i < n; i++) {
				arr[i] = 0;//초기화
				arr[i] = sc.nextInt();
			}
			
			//이웃하는 숫자끼리 뺀 값 저장
			for(int i = n - 1; i >= 1; i--) {
				array[index] = 0;//초기화
				array[index] = Math.abs(arr[i] - arr[i - 1]); //이웃한 값끼리 뺀 값
				index++;
			}
			
			//1부터 n - 1만큼 check에 저장
			for(int i = 0; i < n - 1; i++) {
				num[i] = 0; //초기화
				num[i] = i + 1;
			}
			
			for(int i = 0; i < index; i++) {
				
				check = 0; //초기화
				for(int j = 0; j < n - 1; j++) {
					
					if(array[i] == num[j]) { //check중 뺀 값이 있다면
						check = 1;
						num[j] = 0;
					}
				}
				
				if(check == 0) //없으면 종료
					break;
			}
	
			if(n == 1 || check == 1) //길이가 1이면 무조건 jolly
				System.out.println("Jolly");
			
			else
				System.out.println("Not jolly");
		
		}
		
	}	

}

NOTE

자바에서 입력이 없으면 종료하는 방법은 Scanenr와 BufferedReader 각각 다르다.

Scanner 에서는 sc.hasNext()를 사용하지만

BufferedReader에서는 입력받는 문자열 변수 = br.readLine()) != null를 사용한다.

출처 - https://steady-coding.tistory.com/227

 

'💻 Algorithm > Baekjoon' 카테고리의 다른 글

[JAVA] 백준 5635 - 생일  (0) 2022.08.15
[JAVA] 백준 4539 - 반올림  (0) 2022.08.14
[JAVA] 백준 15829 - Hashing  (0) 2022.08.05
[JAVA] 백준 9012 - 괄호  (0) 2022.08.02
[JAVA] 백준 10866 - 덱  (0) 2022.08.02