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

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

· 11년 전 · 4568 · 5

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

  

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

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

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


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

댓글 작성

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

로그인하기

댓글 5개

11년 전
<?

$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분의 너무나 좋은 답변들 감사합니다!!

게시글 목록

번호 제목
11251
11250
11249
11246
11245
11240
11239
11238
11233
11208
11187
11186
11185
11183
11179
11178
11177
11157
11152
11149
11148
11143
11142
11141
11140
11135
11126
11113
11104
11097