이번에도 스트레스에 지친 두뇌를 쉬게(?) 하기 위해 풀어본 심심풀이 프로그래밍 문제입니다.
연속으로 주어진 숫자들이 n개 있으면 이 숫자들의 간격이 1부터 n-1까지 종류별로 모두 있는 경우를 졸리 점퍼(Jolly jumper)라고 부른다. 예를 들어 1 4 2 3이라는 4개의 숫자가 있을 때 1과 4의 간격은 3, 4와 2의 간격은 2, 2와 3의 간격은 1로 1에서 3까지 모두 있다.
숫자 리스트를 입력 받아 졸리 점퍼인지 판단하는 프로그램을 작성하라.
원 문제 링크 : http://functional.or.kr/node/131
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#! /usr/bin/perl
use strict;
use warnings;
use integer;
my @n;
my %d;
my $a;
@n = split '\s+', <>;
if ( is_jolly_num(@n) ) {
print "Jolly.\n";
}
else {
print "Not jolly.\n";
}
sub is_jolly_num {
my @n = @_;
foreach ( @n ) {
$d{abs($a - $_)} = 1 if defined($a);
$a = $_;
}
foreach ( 1..(@n - 1) ) {
unless ( defined($d{$_}) ) {
return 0;
}
}
return 1;
}
|