BOJ 1065 한수

1 개요[ | ]

BOJ 1065 한수
  • 각 자리수가 등차수열을 이루는 지 판별하는 함수를 구현해 문제를 해결해봅니다
  • 알고리즘 분류: 브루트 포스, 탐색
  • "한수"라는 명칭이 어디서 왔는지 모르겠으나, "직선수(straight-line numbers)"가 적절한 명칭인듯 하다.

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

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

4 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";

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

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

7 같이 보기[ | ]

8 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}