테스트 사이트 - 개발 중인 베타 버전입니다

앞으로 읽어도, 뒤로 읽어도 같은 수

아래의 문제의 답을 도출하는 과정을 프로그래밍 언어로 구현하시오.(php, javascript... 뭐든 좋습니다)

  

앞으로 읽어도, 뒤로 읽어도 같은 수는

101, 6, 7777 와 같은 경우가 있습니다, 

23, 876, 7727 와 같은 경우는 아닙니다.


문제) 어떤 수 N (N 은 10자리 이하인 자연수) 이 주어질 때, N보다 큰 수 중에서 앞으로 읽어도, 뒤로 읽어도 같은 수중 가장 작은 수를 출력하시오. 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 5개

<?

$default = 7776; // 어떤수

while(1){

$default++;
if($default == strrev($default)) break;
if($default > 1000000000) exit;
}

echo $default;

?>
간단하고 빠르고 좋네요.

큰 숫자가 오면 느릴줄 알앗는데 그렇지는 않네요

12 ~ 3 자리 넘어가야 느려지네요.

잘 배웠습니다.
<?php

set_time_limit(0);
//ini_set('memory_limit','1G');
header('Content-Type: text/html; charset=utf-8');



function microtime_float() {

list($usec, $sec) = explode(" ", microtime());
return (((float)substr((string)$usec, 0, 4) + (float)$sec)) * 1000;
}



function get_excute_time($msg, $start_time){

$end_time = microtime_float();
$time = ($end_time - $start_time) / 1000;

echo "$msg : $time seconds" . PHP_EOL ;
}



$start_time = microtime_float();



/*

각 자리수별로 조건에 맞는 가장 작은 수는 2, 11, 101, 1001, ...... 1000000001
1자리수를 제외하고는 모두, 양옆이 1이며 나머지는 0으로 구성된 수
1자리수가 2인 이유는 입력받는 값이 자연수이기 때문, 즉, 예외

각 자리수별로 조건에 맞는 가장 큰 수는 9, 99, 999, 9999 ...... 9999999999
전부 9로만 구성된 수

들어온 수가 9, 99, 999, 9999 ...... 9999999999 등 전부 9로만 구성된 수라면
조건에 맞는 가장 작은 수는 현재 수의 자리수 보다 한자리 큰 수이고 마지막이 1이다.
9 -> 11. 99 -> 101, 999 -> 1001 ...... 9999999999 10000000001

9로만 구성된 수가 아니라면 같은 자리수에 조건에 맞는 수가 있다.
*/

function check_all_nine ($string, $length) {

for ($i = 0; $i < $length; $i++) {

if ($string[$i] != '9')
return false;
}

return true;
}

function get_number ($input) {

$string = (string)$input;
$length = strlen($string);

if ($input == 1) // 1
return 2;

if ($length == 1 && $input != 9) // 9 가 아닌 한자리수
return ($input + 1);

if (pow(10, ($length - 1)) == $input) // 10, 100, 1000 ......
return ($input + 1);

if (check_all_nine ($string, $length) === true) //전부 9로 구성
return pow(10, $length) + 1;

if ($length % 2 == 1) {//홀수

$length_half = floor($length / 2);
$a = substr($string, 0, $length_half);
$a_ = '';
for ($i = ($length_half - 1); $i >= 0; $i--) {

$a_ .= $a[$i];
}

$a_ = (int)$a_;
$b = (int)substr($string, ($length_half + 1), $length_half);
$c = substr($string, $length_half, 1);

if ($a_ > $b) {

return (int)($a . $c . (string)$a_);
}
else {

if ($c != '9') {

return (int)($a . (string)((int)$c + 1) . (string)$a_);
}
else {

$a = (string)((int)$a + 1);
$a_ = '';
for ($i = ($length_half - 1); $i >= 0; $i--) {

$a_ .= $a[$i];
}

return (int)($a . '0' . $a_);
}
}
}
else {//짝수

$length_half = $length / 2;
$a = substr($string, 0, $length_half);
$a_ = '';
for ($i = ($length_half - 1); $i >= 0; $i--) {

$a_ .= $a[$i];
}

$a_ = (int)$a_;
$b = (int)substr($string, $length_half, $length_half);

if ($a_ > $b) {

return (int)($a . (string)$a_);
}
else {

$a = (string)((int)$a + 1);
$a_ = '';
for ($i = ($length_half - 1); $i >= 0; $i--) {

$a_ .= $a[$i];
}

return (int)($a . $a_);
}
}
}

$input = 1;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 5;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 10;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 10000;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 1000000000;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 9;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 99999;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 9999999999;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 123451234;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 123491234;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 123454321;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 123494329;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 1234512345;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 1234554321;
echo $input . " => " . get_number($input) . PHP_EOL;

$input = 1234565432;
echo $input . " => " . get_number($input) . PHP_EOL;

get_excute_time("진행 시간", $start_time);

?>
1 => 2
5 => 6
10 => 11
10000 => 10001
1000000000 => 1000000001
9 => 11
99999 => 100001
9999999999 => 10000000001
123451234 => 123454321
123491234 => 123494321
123454321 => 123464321
123494329 => 123505321
1234512345 => 1234554321
1234554321 => 1234664321
1234565432 => 1234664321
진행 시간 : 0 seconds
2분의 너무나 좋은 답변들 감사합니다!!

게시판 목록

퀴즈게시판

답을 맞히시면, 문제를 내신 회원님이 채택을 해드립니다.
채택은 '좋아요'와 같습니다.
글쓰기