greenhelix
greenhelix
greenhelix
05-11 08:38
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#26_Code Signal Arcade >> Even Digits Only
Algorithm/Java

#26_Code Signal Arcade >> Even Digits Only

2019. 11. 30. 12:00

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요!


Even Digits Only 

짝수 숫자 만 오게 하자.

 

문제를 보면, 주어진 숫자의 모든 자릿수 하나하나 검사해서 모두 짝수 인지 확인해주는 알고리즘이다. 

 

짝수의 조건 ;  2의 배수여야 하며,  0도 짝수라고 칩니다. 

 

입력값의 자릿 수마다 다 짝수인지 확인해주는 과정이 필요합니다. 

 

전체값을  반복문을 통해서 한 자리값마다 값이 나오게 합니다. 그리고, 그 값들이 짝수인지 확인해주면 됩니다. 

중간에 홀수가 나와버리면 바로 false로 리턴합니다. 

 

답안을 볼까요? 

 

boolean evenDigitsOnly(int n) {
    int length2 = (int)(Math.log10(n)+1);
    boolean result = true;          
    int next = 0; 
    
 for(int i =1 ; i<= length2; i++) {
     next = n%10; 
     n /= 10;
     if(next % 2 == 0 ){
         continue; 
     }else if(next % 2 != 0){
         return result = false; 
     } 
 }
  return result;     
}

먼저, 입력값이 배열이 아니라, 숫자형입니다. 

이것의 길이를 구해줘야하는데요. 그 방법은 아래와 같습니다. 

 int length2 = (int)(Math.log10(n)+1);
 
 //test
 System.out.println("n의 길이 = "+ length2);

 Math.log10(n) 이 보이시나요? 

먼저 log 계산을 하여, 각 자리수의 갯수를 구해주고, 거기에 +1 을 해줍니다. 그렇게 되면 자연스럽게 숫자형의 길이가 출력됩니다. 단, 여기서 int로 형변환 을 잊으시면 안됩니다. 

 

다음은 리턴값과 각 자리를 비교해줄 변수를 선언해줍니다. 

    boolean result = true;          
    int next = 0; 

 

이제 준비는 끝났습니다. 

밙복문을 통해서 한자리 한자리 찾아가며 짝수인지 확인을 해줍니다. 아래와 같이요. 

 for(int i =1 ; i<= length2; i++) {
     next = n%10;  //입력값의 끝에 한자리 값
     n /= 10; //입력값의 끝에 한자리를 뺀 값
       if(next % 2 == 0 ){
           continue; 
       }else if(next % 2 != 0){
           return result = false; 
       } 
 }

어떻게 배열도 아닌데, 한자리씩 검사를 하는가? 

바로 간단한 % 계산을 통해서 구합니다. 아시다시피 %는 나머지를 구하는 연산자입니다. 

이 수를 반복적이게 진행하면, 항상 나머지 값은 1의 자리수가 나오게 됩니다. 

그리고나서, 다시 입력값을 / 연산자로 10을 나눠버리면, 아까 나온 1의자리는 사라지고 10의 자리가

1의 자리로 이동합니다. (배열보다 효율적이다...뭔가? )

 

간단하게 % 와 / 의 연산으로 숫자의 1의 자릿수를 출력하게 되면, 반복문을 통해서 각 자리의 값들의 검사를 진행하면됩니다. 

if 조건문을 통해서 아까 말한 짝수의 조건대로 검사를 하는 것이죠. 당연히 리턴값은 t / f 로 해주구요. 

 

2로 나눠지거나 0이면 짝수이니깐, 

next % 2 == 0 의 조건으로 실행합니다. 그외에 값들은 false로 진행하고요. 

 

이상입니다. 

이제 다른 답안을 확인해 볼께요. 

 


JAVA

boolean evenDigitsOnly(int n) {
    return Integer.toString(n).matches("(0|2|4|6|8)*");
}

 어처구니가 없었습니다. 

한줄이라니!!! 

 

이분은 정규식을 통해서 값들을 비교해주었습니다. 

Integer 로 형변환을 해주고, 

toString(n) 스트링으로 받아서, 

mathces( ) 을 통해서, 정규식의 조건과 합치되는 것만 리턴해줍니다. matches  는 참고로 맞으면  t  다르면, f를 리턴합니다. 

정규식의 조건은  "(0|2|4|6|8)*" 이었습니다. 

이말은 들어오는 숫자에서 0,2,4,6,8 의 값이 아무거나 겹쳐도 상관없고 있다면, true로 리턴합니다. 

*의 의미는 없거나 여러개일수 있다는 의미입니다. 

https://regexr.com 에서 테스트 해보실 수 있습니다. 

비슷하지만, 이렇게 해도 되구나 했던 코드도 올리겟습니다. 

boolean evenDigitsOnly(int n) {
    if (n == 0) {
            return true;
        }
        if (n % 2 != 0) {
            return false;
        }
        return evenDigitsOnly(n / 10);
}

JS

function evenDigitsOnly(n) {
return !(n+'').match(/[13579]/)
}

자바스크립트는 비슷합니다. 


Python3 

def evenDigitsOnly(n):
    return all([int(i)%2==0 for i in str(n)])

파이썬도 간단하네요. 반복문을 통해서 각 자릿수를 검사해준것으로 보입니다. 

 

728x90
반응형
저작자표시 비영리 변경금지

'Algorithm > Java' 카테고리의 다른 글

#27_Code Signal Arcade >> Variable Name  (0) 2019.12.02
#25_Code Signal Arcade >> Array Replace  (0) 2019.11.28
#24_Code Signal Arcade >> Mine Sweeper  (0) 2019.11.27
    'Algorithm/Java' 카테고리의 다른 글
    • #28_Code Signal Arcade >> Alphabetic Shift
    • #27_Code Signal Arcade >> Variable Name
    • #25_Code Signal Arcade >> Array Replace
    • #24_Code Signal Arcade >> Mine Sweeper
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바