개요
- BOJ 1065 한수
- 각 자리수가 등차수열을 이루는 지 판별하는 함수를 구현해 문제를 해결해봅니다
- 알고리즘 분류: 브루트 포스, 탐색
- "한수"라는 명칭이 어디서 왔는지 모르겠으나, "직선수(straight-line numbers)"가 적절한 명칭인듯 하다.
C++
#include <iostream>
using namespace std;
bool is_straight(int num) {
if( num<100 ) return true;
int right = num%10;
num /= 10;
int middle = num%10;
int diff = middle - right;
while( num >= 10 ) {
right = num%10;
num /= 10;
middle = num%10;
if( diff != middle - right ) return false;
}
return true;
}
int main() {
int N;
scanf("%d", &N);
int count = 0;
for(int i=1; i<=N; i++) {
if( is_straight(i) ) count++;
}
cout << count;
}
Java
import java.util.Scanner;
public class Main {
private static boolean isStraight(int num) {
if( num < 100 ) return true;
int right, middle, diff;
right = num%10;
num = num/10;
middle = num%10;
diff = middle - right;
while( num >= 10 ) {
right = num%10;
num = num/10;
middle = num%10;
if( diff != middle - right ) return false;
}
return true;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
for(int i=1; i<=n; i++) {
if( isStraight(i) ) count++;
}
System.out.println(count);
}
}
Perl
sub is_straight {
$num = shift;
return 1 if( $num < 100 );
$right = $num % 10;
$num = $num/10;
$middle = $num % 10;
$diff = $middle - $right;
while( $num >= 10 ) {
$right = $num % 10;
$num = $num/10;
$middle = $num % 10;
return 0 if( $diff ne ($middle - $right) );
}
return 1;
}
$n = <>;
$count = 0;
for(1..$n) {
$count++ if( is_straight($_) eq 1 );
}
print $count . "\n";
PHP
<?php
function is_straight($num) {
if( $num < 100 ) return true;
$right = $num % 10;
$num = intdiv($num, 10);
$middle = $num % 10;
$diff = $middle - $right;
while( $num >= 10 ) {
$right = $num % 10;
$num = intdiv($num, 10);
$middle = $num % 10;
if( $diff != $middle - $right ) return false;
}
return true;
}
fscanf(STDIN,'%d',$n);
$count = 0;
for($i=1; $i<=$n; $i++) {
if( is_straight($i) ) $count++;
}
echo $count;
Python
def is_straight(num):
if num < 100:
return True
right = num % 10
num = num // 10
middle = num % 10
diff = middle - right
while( num >= 10 ):
right = num % 10
num = num // 10
middle = num % 10
if( diff != middle - right ):
return False
return True
n = int(input())
count = 0;
for i in range(1,n+1):
if is_straight(i):
count += 1
print( count )
같이 보기
참고