해피넘버

해피넘버
GfG Practice에서 사용해 보세요.

각 단계 번호가 해당 숫자의 제곱합으로 대체되는 일련의 단계 후에 1이 되는 숫자, 즉 Happy Number로 시작하여 숫자 제곱합으로 계속 바꾸면 1에 도달하는 숫자를 행복이라고 합니다. 

예:  

 Input: n = 19   
Output: True
19 is Happy Number
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
As we reached to 1 19 is a Happy Number.

Input: n = 20
Output: False

이미 터치된 숫자에 연속적으로 닿는 등 순서대로 루프를 만드는 숫자는 해피 넘버가 아닙니다. 따라서 숫자가 행복한지 여부를 확인하기 위해 동일한 숫자가 다시 발생하면 결과를 행복하지 않은 것으로 표시하여 세트를 유지할 수 있습니다. 위 접근 방식의 간단한 함수는 다음과 같이 작성할 수 있습니다.  

C++
   // method return true if n is Happy Number   int     numSquareSum  (  int     n  )     {      int     num     =     0  ;      while     (  n     !=     0  )     {      int     digit     =     n     %     10  ;      num     +=     digit     *     digit  ;      n     /=     10  ;      }      return     num  ;   }   int     isHappyNumber  (  int     n  )   {      set   <  int  >     st  ;      while     (  1  )      {      n     =     numSquareSum  (  n  );      if     (  n     ==     1  )      return     true  ;      if     (  st  .  find  (  n  )     !=     st  .  end  ())      return     false  ;      st  .  insert  (  n  );      }   }   
Java
   // method return true if n is Happy Number   public     static     int     numSquareSum  (  int     n  )   {      int     num     =     0  ;      while     (  n     !=     0  )     {      int     digit     =     n     %     10  ;      num     +=     digit     *     digit  ;      n     /=     10  ;      }      return     num  ;   }   static     boolean     isHappyNumber  (  int     n  )   {      HashSet   <  Integer  >     st     =     new     HashSet   <>  ();      while     (  true  )     {      n     =     numSquareSum  (  n  );      if     (  n     ==     1  )      return     true  ;      if     (  st  .  contains  (  n  ))      return     false  ;      st  .  add  (  n  );      }   }   // This code is contributed by Princi Singh   
Python
   # method return true if n is Happy Number   def   numSquareSum  (  n  ):   num   =   0   while  (  n  ):   digit   =   n   %   10   num   =   num   +   digit  *  digit   n   =   n   //   10   return   num   def   isHappyNumber  (  n  ):   st   =   set  ()   while   (  1  ):   n   =   numSquareSum  (  n  )   if   (  n   ==   1  ):   return   True   if   n   not   in   st  :   return   False   st  .  insert  (  n  )   
C#
   // Method return true if n is Happy Number   static     int     numSquareSum  (  int     n  )   {      int     num     =     0  ;      while     (  n     !=     0  )     {      int     digit     =     n     %     10  ;      num     +=     digit     *     digit  ;      n     /=     10  ;      }      return     num  ;   }   static     int     isHappyNumber  (  int     n  )   {      HashSet   <  int  >     st     =     new     HashSet   <>  ();      while     (  1  )     {      n     =     numSquareSum  (  n  );      if     (  n     ==     1  )      return     true  ;      if     (  st  .  Contains  (  n  ))      return     false  ;      st  .  Add  (  n  );      }   }   // This code is contributed by 29AjayKumar   
JavaScript
    <  script  >   // method return true if n is Happy Number      function     numSquareSum  (  n  )     {      let     num     =     0  ;      while     (  n     !==     0  )     {      let     digit     =     n     %     10  ;      num     +=     digit     *     digit  ;      n     =     Math  .  floor  (  n     /     10  );      }      return     num  ;      }      let     st     =     new     Set  ();      while     (  1  )      {      n     =     numSquareSum  (  n  );      if     (  n     ==     1  )      return     true  ;      if     (  st  .  has  (  n  ))      return     false  ;      st  .  add  (  n  );      }   }   //This code is contributed by Mayank Tyagi    <  /script>   

복잡성 분석:

시간 복잡도: O(n*log(n)). 
보조 공간: O(n) 저장용으로 별도의 세트를 사용한 이후

추가 공간을 사용하지 않고도 이 문제를 해결할 수 있으며 해당 기술은 다른 유사한 문제에도 사용할 수 있습니다. 모든 숫자를 노드로 취급하고 제곱합 숫자를 링크로 대체하면 이 문제는 다음과 같습니다. 링크리스트에서 루프 찾기

따라서 위 링크에서 제안된 솔루션으로 우리는 두 개의 숫자를 느리고 빠르게 유지합니다. 둘 다 주어진 숫자에서 초기화합니다. 느린 것은 한 번에 한 단계씩 교체되고, 빠른 것은 한 번에 두 단계씩 교체됩니다. 그들이 1시에 만나면 주어진 숫자는 Happy Number이고, 그렇지 않으면 그렇지 않습니다.  

C++
   // C++ program to check a number is a Happy number or not   #include          using     namespace     std  ;   // Utility method to return sum of square of digit of n   int     numSquareSum  (  int     n  )   {      int     squareSum     =     0  ;      while     (  n  )     {      squareSum     +=     (  n     %     10  )     *     (  n     %     10  );      n     /=     10  ;      }      return     squareSum  ;   }   // method return true if n is Happy number   bool     isHappynumber  (  int     n  )   {      int     slow       fast  ;      // initialize slow and fast by n      slow     =     fast     =     n  ;      do     {      // move slow number by one iteration      slow     =     numSquareSum  (  slow  );      // move fast number by two iteration      fast     =     numSquareSum  (  numSquareSum  (  fast  ));      }     while     (  slow     !=     fast  );      // if both number meet at 1 then return true      return     (  slow     ==     1  );   }   // Driver code to test above methods   int     main  ()   {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      cout      < <     n      < <     ' is a Happy number  n  '  ;      else      cout      < <     n      < <     ' is not a Happy number  n  '  ;   }   // This code is contributed by divyeshrabadiya07   
C
   // C program to check a number is a Happy number or not   #include         #include         // Utility method to return sum of square of digit of n   int     numSquareSum  (  int     n  )   {      int     squareSum     =     0  ;      while     (  n  )     {      squareSum     +=     (  n     %     10  )     *     (  n     %     10  );      n     /=     10  ;      }      return     squareSum  ;   }   // method return true if n is Happy number   bool     isHappynumber  (  int     n  )   {      int     slow       fast  ;      // initialize slow and fast by n      slow     =     fast     =     n  ;      do     {      // move slow number by one iteration      slow     =     numSquareSum  (  slow  );      // move fast number by two iteration      fast     =     numSquareSum  (  numSquareSum  (  fast  ));      }     while     (  slow     !=     fast  );      // if both number meet at 1 then return true      return     (  slow     ==     1  );   }   // Driver code to test above methods   int     main  ()   {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      printf  (  '%d is a Happy number  n  '       n  );      else      printf  (  '%d is not a Happy number  n  '       n  );   }   // This code is contributed by Sania Kumari Gupta   // (kriSania804)   
Java
   // Java program to check a number is a Happy   // number or not   class   GFG     {       // Utility method to return sum of square of   // digit of n   static     int     numSquareSum  (  int     n  )   {      int     squareSum     =     0  ;      while     (  n  !=     0  )      {      squareSum     +=     (  n     %     10  )     *     (  n     %     10  );      n     /=     10  ;      }      return     squareSum  ;   }       // method return true if n is Happy number   static     boolean     isHappynumber  (  int     n  )   {      int     slow       fast  ;          // initialize slow and fast by n      slow     =     fast     =     n  ;      do      {      // move slow number      // by one iteration      slow     =     numSquareSum  (  slow  );          // move fast number      // by two iteration      fast     =     numSquareSum  (  numSquareSum  (  fast  ));          }      while     (  slow     !=     fast  );          // if both number meet at 1      // then return true      return     (  slow     ==     1  );   }       // Driver code to test above methods   public     static     void     main  (  String  []     args  )   {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      System  .  out  .  println  (  n     +         ' is a Happy number'  );      else      System  .  out  .  println  (  n     +         ' is not a Happy number'  );   }   }   
Python
   # Python3 program to check if a number is a Happy number or not   # Utility method to return the sum of squares of digits of n   def   num_square_sum  (  n  ):   square_sum   =   0   while   n  :   square_sum   +=   (  n   %   10  )   **   2   n   //=   10   return   square_sum   # Method returns True if n is a Happy number   def   is_happy_number  (  n  ):   # Initialize slow and fast pointers   slow   =   n   fast   =   n   while   True  :   # Move slow pointer by one iteration   slow   =   num_square_sum  (  slow  )   # Move fast pointer by two iterations   fast   =   num_square_sum  (  num_square_sum  (  fast  ))   if   slow   !=   fast  :   continue   else  :   break   # If both pointers meet at 1 then return True   return   slow   ==   1   # Driver Code   n   =   13   if   is_happy_number  (  n  ):   print  (  n     'is a Happy number'  )   else  :   print  (  n     'is not a Happy number'  )   
C#
   // C# program to check a number   // is a Happy number or not   using     System  ;   class     GFG     {   // Utility method to return    // sum of square of digit of n   static     int     numSquareSum  (  int     n  )   {      int     squareSum     =     0  ;      while     (  n  !=     0  )      {      squareSum     +=     (  n     %     10  )     *         (  n     %     10  );      n     /=     10  ;      }      return     squareSum  ;   }   // method return true if   // n is Happy number   static     bool     isHappynumber  (  int     n  )   {      int     slow       fast  ;      // initialize slow and      // fast by n      slow     =     fast     =     n  ;      do      {          // move slow number      // by one iteration      slow     =     numSquareSum  (  slow  );      // move fast number      // by two iteration      fast     =     numSquareSum  (  numSquareSum  (  fast  ));      }      while     (  slow     !=     fast  );      // if both number meet at 1      // then return true      return     (  slow     ==     1  );   }   // Driver code   public     static     void     Main  ()   {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      Console  .  WriteLine  (  n     +         ' is a Happy number'  );      else      Console  .  WriteLine  (  n     +         ' is not a Happy number'  );   }   }   // This code is contributed by anuj_67.   
JavaScript
    <  script  >   // Javascript program to check a number is a Happy   // number or not   // Utility method to return sum of square of   // digit of n   function     numSquareSum  (  n  )   {      var     squareSum     =     0  ;      while     (  n  !=     0  )      {      squareSum     +=     (  n     %     10  )     *     (  n     %     10  );      n     =     parseInt  (  n  /  10  );      }      return     squareSum  ;   }       // method return true if n is Happy number   function     isHappynumber  (  n  )   {      var     slow       fast  ;          // initialize slow and fast by n      slow     =     fast     =     n  ;      do      {      // move slow number      // by one iteration      slow     =     numSquareSum  (  slow  );          // move fast number      // by two iteration      fast     =     numSquareSum  (  numSquareSum  (  fast  ));          }      while     (  slow     !=     fast  );          // if both number meet at 1      // then return true      return     (  slow     ==     1  );   }       // Driver code to test above methods   var     n     =     13  ;   if     (  isHappynumber  (  n  ))      document  .  write  (  n     +         ' is a Happy number'  );   else      document  .  write  (  n     +         ' is not a Happy number'  );       // This code contributed by Princi Singh     <  /script>   
PHP
      // PHP program to check a number   // is a Happy number or not   // Utility method to return    // sum of square of digit of n   function   numSquareSum  (   $n  )   {   $squareSum   =   0  ;   while   (  $n  )   {   $squareSum   +=   (  $n   %   10  )   *   (  $n   %   10  );   $n   /=   10  ;   }   return   $squareSum  ;   }   // method return true if   // n is Happy number   function   isHappynumber  (   $n  )   {   $slow  ;   $fast  ;   // initialize slow    // and fast by n   $slow   =   $n  ;   $fast   =   $n  ;   do   {   // move slow number   // by one iteration   $slow   =   numSquareSum  (  $slow  );   // move fast number   // by two iteration   $fast   =   numSquareSum  (  numSquareSum  (  $fast  ));   }   while   (  $slow   !=   $fast  );   // if both number meet at 1    // then return true   return   (  $slow   ==   1  );   }   // Driver Code   $n   =   13  ;   if   (  isHappynumber  (  $n  ))   echo   $n      ' is a Happy number  n  '  ;   else   echo   n      ' is not a Happy number  n  '  ;   // This code is contributed by anuj_67.   ?>   

출력 :  

 13 is a Happy Number  

복잡성 분석:

시간 복잡도: O(n*log(n)).
보조 공간: 오(1). 


추가 공간을 사용하지 않고 이 문제를 해결하는 또 다른 접근 방식입니다.
숫자는 행복한 숫자가 될 수 없습니다 어떤 단계에서든 얻은 자릿수 제곱의 합이 1이나 7을 제외한 한 자리 숫자인 경우 . 1과 7이 유일한 한자리 행복한 숫자이기 때문이다. 이 정보를 사용하여 아래 코드와 같은 접근 방식을 개발할 수 있습니다. 

C++
   // C++ program to check if a number is a Happy number or   // not.   #include          using     namespace     std  ;   // Method - returns true if the input is a happy number else   // returns false   bool     isHappynumber  (  int     n  )   {      int     sum     =     n       x     =     n  ;      // This loop executes till the sum of square of digits      // obtained is not a single digit number      while     (  sum     >     9  )     {      sum     =     0  ;      // This loop finds the sum of square of digits      while     (  x     >     0  )     {      int     d     =     x     %     10  ;      sum     +=     d     *     d  ;      x     /=     10  ;      }      x     =     sum  ;      }      if     (  sum     ==     7     ||     sum     ==     1  )      return     true  ;      return     false  ;   }   int     main  ()   {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      cout      < <     n      < <     ' is a Happy number'  ;      else      cout      < <     n      < <     ' is not a Happy number'  ;      return     0  ;   }   // This code is contributed by Sania Kumari Gupta   
C
   // C program to check if a number is a Happy number or   // not.   #include         #include         // Method - returns true if the input is a happy number else   // returns false   bool     isHappynumber  (  int     n  )   {      int     sum     =     n       x     =     n  ;      // This loop executes till the sum of square of digits      // obtained is not a single digit number      while     (  sum     >     9  )     {      sum     =     0  ;      // This loop finds the sum of square of digits      while     (  x     >     0  )     {      int     d     =     x     %     10  ;      sum     +=     d     *     d  ;      x     /=     10  ;      }      x     =     sum  ;      }      if     (  sum     ==     7     ||     sum     ==     1  )      return     true  ;      return     false  ;   }   int     main  ()   {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      printf  (  '%d is a Happy number'       n  );      else      printf  (  '%d is not a Happy number'       n  );      return     0  ;   }   // This code is contributed by Sania Kumari Gupta   
Java
   // This code is contributed by Vansh Sodhi.   // Java program to check if a number is a Happy number or   // not.   class   GFG     {      // method - returns true if the input is a happy      // number else returns false      static     boolean     isHappynumber  (  int     n  )      {      int     sum     =     n       x     =     n  ;      // this loop executes till the sum of square of      // digits obtained is not a single digit number      while     (  sum     >     9  )     {      sum     =     0  ;      // this loop finds the sum of square of digits      while     (  x     >     0  )     {      int     d     =     x     %     10  ;      sum     +=     d     *     d  ;      x     /=     10  ;      }      x     =     sum  ;      }      if     (  sum     ==     1     ||     sum     ==     7  )      return     true  ;      return     false  ;      }      // Driver code      public     static     void     main  (  String  []     args  )      {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      System  .  out  .  println  (  n     +     ' is a Happy number'  );      else      System  .  out  .  println  (  n      +     ' is not a Happy number'  );      }   }   
Python
   # Python3 program to check if a number is a Happy number or not.   # Method - returns true if the input is   # a happy number else returns false   def   isHappynumber  (  n  ):   Sum     x   =   n     n   # This loop executes till the sum   # of square of digits obtained is   # not a single digit number   while   Sum   >   9  :   Sum   =   0   # This loop finds the sum of   # square of digits   while   x   >   0  :   d   =   x   %   10   Sum   +=   d   *   d   x   =   int  (  x   /   10  )   x   =   Sum   if   Sum   ==   1   or   Sum   ==   7  :   return   True   return   False   n   =   13   if   isHappynumber  (  n  ):   print  (  n     'is a Happy number'  )   else  :   print  (  n     'is not a Happy number'  )   # This code is contributed by mukesh07.   
C#
   // C# program to check if a number   // is a Happy number or not.   using     System  ;   class     GFG     {      // Method - returns true if the input is      // a happy number else returns false      static     bool     isHappynumber  (  int     n  )      {      int     sum     =     n       x     =     n  ;      // This loop executes till the sum      // of square of digits obtained is      // not a single digit number      while     (  sum     >     9  )     {      sum     =     0  ;      // This loop finds the sum of      // square of digits      while     (  x     >     0  )     {      int     d     =     x     %     10  ;      sum     +=     d     *     d  ;      x     /=     10  ;      }      x     =     sum  ;      }      if     (  sum     ==     1     ||     sum     ==     7  )      return     true  ;      return     false  ;      }      // Driver code      public     static     void     Main  (  String  []     args  )      {      int     n     =     13  ;      if     (  isHappynumber  (  n  ))      Console  .  WriteLine  (  n     +     ' is a Happy number'  );      else      Console  .  WriteLine  (  n     +     ' is not a Happy number'  );      }   }   // This code is contributed by 29AjayKumar   
JavaScript
    <  script  >   // This code is contributed by Vansh Sodhi.   // javascript program to check if a number is a Happy number or not.      // method - returns true if the input is a happy      // number else returns false      function     isHappynumber  (  n  )      {      var     sum     =     n       x     =     n  ;      // this loop executes till the sum of square of      // digits obtained is not a single digit number      while  (  sum     >     9  )         {      sum     =     0  ;      // this loop finds the sum of square of digits      while     (  x     >     0  )         {      var     d     =     x     %     10  ;      sum     +=     d     *     d  ;      x     /=     10  ;      }      x     =     sum  ;      }      if  (  sum     ==     1     ||     sum     ==     7  )      return     true  ;      return     false  ;   }   // Driver code      var     n     =     13  ;      if     (  isHappynumber  (  n  ))      document  .  write  (  n     +         ' is a Happy number'  );      else      document  .  write  (  n     +         ' is not a Happy number'  );       // This code is contributed by 29AjayKumar     <  /script>   

산출
13 is a Happy number 

복잡성 분석:

시간 복잡도: O(n*log(n)).
보조 공간: 오(1). 

GeeksforGeeks의 메인 페이지에 나타나는 기사를 보고 다른 Geeks를 도와주세요.
 

퀴즈 만들기