앞으로 읽어도, 뒤로 읽어도 같은 수
아래의 문제의 답을 도출하는 과정을 프로그래밍 언어로 구현하시오.(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;
?>
$default = 7776; // 어떤수
while(1){
$default++;
if($default == strrev($default)) break;
if($default > 1000000000) exit;
}
echo $default;
?>
11년 전
간단하고 빠르고 좋네요.
큰 숫자가 오면 느릴줄 알앗는데 그렇지는 않네요
12 ~ 3 자리 넘어가야 느려지네요.
잘 배웠습니다.
큰 숫자가 오면 느릴줄 알앗는데 그렇지는 않네요
12 ~ 3 자리 넘어가야 느려지네요.
잘 배웠습니다.
11년 전
<?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);
?>
11년 전
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
11년 전
2분의 너무나 좋은 답변들 감사합니다!!
게시판 목록
퀴즈게시판
답을 맞히시면, 문제를 내신 회원님이 채택을 해드립니다.
채택은 '좋아요'와 같습니다.
채택은 '좋아요'와 같습니다.
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 1206 | 6년 전 | 5794 | ||
| 1205 | 6년 전 | 2307 | ||
| 1204 | 6년 전 | 3262 | ||
| 1203 | 6년 전 | 2295 | ||
| 1202 | 6년 전 | 2091 | ||
| 1201 | 6년 전 | 3146 | ||
| 1200 | 6년 전 | 2459 | ||
| 1199 | 6년 전 | 1574 | ||
| 1198 | 6년 전 | 2170 | ||
| 1197 | 6년 전 | 2853 | ||
| 1196 | 6년 전 | 2314 | ||
| 1195 | 6년 전 | 4553 | ||
| 1194 | 6년 전 | 8212 | ||
| 1193 | 6년 전 | 2130 | ||
| 1192 | 6년 전 | 2748 | ||
| 1191 | 6년 전 | 1785 | ||
| 1190 | 6년 전 | 2347 | ||
| 1189 | 6년 전 | 3210 | ||
| 1188 | 6년 전 | 2742 | ||
| 1187 | 6년 전 | 3140 | ||
| 1186 | 6년 전 | 2610 | ||
| 1185 | 6년 전 | 5791 | ||
| 1184 | 6년 전 | 5426 | ||
| 1183 | 6년 전 | 2716 | ||
| 1182 | 6년 전 | 1441 | ||
| 1181 | 6년 전 | 2107 | ||
| 1180 | 6년 전 | 2149 | ||
| 1179 | 6년 전 | 3177 | ||
| 1178 | 6년 전 | 1351 | ||
| 1177 | 6년 전 | 3694 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기