하루하루 꾸준히, 인생은 되는대로

알고리즘

백준 4383 점프는 즐거워 C++

긤효중 2022. 7. 15. 17:28

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개의 수가 주어진다.


일단 배열을 케이스마다 입력받고, i번째와 i+1번쨰의 차이의 절대값을 구해서 map에 넣어주었다.

map을 처음부터 끝까지 순회하면서 map에 있는 값들을 bool배열의 true로 바꿔주었고,

만약 1부터 N-1까지 bool배열의 값이 false가 있다면, Jolly jumper가 아니므로 이 경우에는 Not jolly를 출력하였다.


#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <cmath>
using namespace std;

int n;
int main(void){
    while(cin >> n){
        int arr[3001];
        for(int i = 0;i<n;i++){
            cin >> arr[i];
        }
    
        map<int,int> m;
        map<int,int>::iterator iter;
        
        bool isvalid = false;
        
        for(int i = 0;i<n-1;i++){ //i번쨰와 i+1번쨰의 차이의 절대값을 map에 넣고
            int diff = abs(arr[i] - arr[i+1]);
            iter = m.find(diff);
            if(iter == m.end()){
                m.insert({diff,diff});
            }
        }
       
       bool indexs[3001] = {false, };
        
       for(iter = m.begin();iter != m.end();iter++){ //map 처음부터 끝까지 방문처리
           int N = iter->second;
           indexs[N] = true;
 
           
       }

        
        for(int i = 1;i<=n-1;i++){ //Jolly수열이 아닌경우
            if(indexs[i] == false){
                isvalid = true;
                break;
            }
        }
        
        if(isvalid == false || n == 1){
            cout << "Jolly" << '\n';
        }
        else{
            cout << "Not jolly" << '\n';
        }
    }
}

 

'알고리즘' 카테고리의 다른 글

백준 17182 우주 탐사선 C++  (0) 2022.07.17
백준 10384 팬그램 C++  (0) 2022.07.16
백준 19699 소-난다!  (0) 2022.07.15
백준 18114 블랙 프라이데이 C++  (0) 2022.07.15
백준 16953 A->B C++  (0) 2022.07.15