티스토리 뷰
https://app.codility.com/demo/results/trainingPKZD2X-32D/
패스워드의 조건;
짝수 개의 문자(a-z, A-Z), 홀수 개의 숫자(0-9)
모든 문자는 아스키 코드로 표시할 수 있다는 조건.
처음 생각은 String 으로 값이 들어오기에 공백으로 explode 해서
각 단어별로 각 문자의 아스키 값을 구해 조건에 맞는지 비교하려고 했다.
근데 그럼 for문의 중첩을 피할 수가 없다!! 이럼 Time complexity 확 올라가서 안됨...
그래서 생각한게 아래의 방법인데 예외처리가 부실해서 부실점수 획득 ;)
function solution($S) { $result = -1; $N = strlen($S); if ($N < 1 || $N > 200) return $result; // 0~9 : 48~57 // A~Z : 65~90 // a~z : 97~122 // space : 32 // NULL : 0 $arr_str = array(); $tmp = ''; $D = $L = 0; for ($i = 0 ; $i < $N ; $i++) { $ascii = ord($S[$i]); if ($ascii == '32') { if ($tmp != '') { //print $tmp." ".$D." ".$L."\n"; if(($D % 2 == 1) && ($L % 2 == 0)) { $arr_str[] = $tmp; } $D = $L = 0; $tmp = ''; } } else { $tmp .= $S[$i]; if ($ascii >= 48 && $ascii <= 57) $D++; else if (($ascii >= 65 && $ascii <= 90) || ($ascii >= 97 && $ascii <= 122)) $L++; } } if ($tmp != '') { if(($D % 2 == 1) && ($L % 2 == 0)) { $arr_str[] = $tmp; } $D = $L = 0; $tmp = ''; } $size_arr = sizeof($arr_str); if ($size_arr < 1) return $result; $max = 0; foreach ($arr_str as $pw) { $max = $max < strlen($pw) ? strlen($pw) : $max; } $result = $max; return $result; }
https://app.codility.com/demo/results/trainingCPXWKF-FM7/
$err_char 로 조건 외 문자를 만나면 검사하는 단어 값을 초기화하도록 수정 => 100!
function solution($S) { $result = -1; $N = strlen($S); if ($N < 1 || $N > 200) return $result; // 0~9 : 48~57 // A~Z : 65~90 // a~z : 97~122 // space : 32 // NULL : 0 $arr_str = array(); $tmp = ''; $D = $L = 0; $err_char = false; for ($i = 0 ; $i < $N ; $i++) { $ascii = ord($S[$i]); if ($ascii == '32') { if ($tmp != '') { if(($D % 2 == 1) && ($L % 2 == 0)) { $arr_str[] = $tmp; } $D = $L = 0; $tmp = ''; } $err_char = false; } else if (!$err_char) { $tmp .= $S[$i]; if ($ascii >= 48 && $ascii <= 57) $D++; else if (($ascii >= 65 && $ascii <= 90) || ($ascii >= 97 && $ascii <= 122)) $L++; else { $err_char = true; $D = $L = 0; $tmp = ''; } } } if ($tmp != '') { if(($D % 2 == 1) && ($L % 2 == 0)) { $arr_str[] = $tmp; } $D = $L = 0; $tmp = ''; } $size_arr = sizeof($arr_str); if ($size_arr < 1) return $result; $max = 0; foreach ($arr_str as $pw) { $max = $max < strlen($pw) ? strlen($pw) : $max; } $result = $max; return $result; }
'알고리즘' 카테고리의 다른 글
알고리즘/ 빠진 양의 정수 찾기 _PHP (0) | 2018.05.22 |
---|---|
알고리즘/ 댐의 최대수위 구하기 _PHP (0) | 2018.05.22 |
알고리즘/ 가장 짧은 거리 구하기 _PHP (0) | 2018.05.19 |
알고리즘/ 빠진 숫자 찾기 _PHP (0) | 2018.05.19 |
알고리즘/ 개구리 점프 _PHP (0) | 2018.05.19 |