앞으로 읽어도, 뒤로 읽어도 같은 수 정보
앞으로 읽어도, 뒤로 읽어도 같은 수본문
아래의 문제의 답을 도출하는 과정을 프로그래밍 언어로 구현하시오.(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;
?>
$default = 7776; // 어떤수
while(1){
$default++;
if($default == strrev($default)) break;
if($default > 1000000000) exit;
}
echo $default;
?>
-
채택 0
간단하고 빠르고 좋네요.
큰 숫자가 오면 느릴줄 알앗는데 그렇지는 않네요
12 ~ 3 자리 넘어가야 느려지네요.
잘 배웠습니다.
큰 숫자가 오면 느릴줄 알앗는데 그렇지는 않네요
12 ~ 3 자리 넘어가야 느려지네요.
잘 배웠습니다.
-
채택 0
<?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);
?>
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);
?>
-
채택 0
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
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
-
채택 0
2분의 너무나 좋은 답변들 감사합니다!!
-
채택 0