Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

231. Power of Two (2의 거듭제곱) C# 본문

코딩 테스트/LeetCode

231. Power of Two (2의 거듭제곱) C#

포카리tea 2022. 10. 6. 14:27

Given an integer n, return true if it is a power of two. Otherwise, return false.

An integer n is a power of two, if there exists an integer x such that n == 2x.

정수 n가 주어지면 2의 거듭제곱이면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

n == 2^x에서 x가 정수인 경우 정수 n은 2의 거듭제곱입니다.

 

예시 1:

입력: n = 1
출력: true
설명: 2^0 = 1

예시 2:

입력: n = 16
출력: true
설명: 24 = 16

예시 3:

입력: n = 3
출력: false

 

조건:

  • -2^31 <= n <= 2^31 - 1

 

Follow up: Could you solve it without loops/recursion?

후속 조치: 루프/재귀 없이 해결할 수 있습니까?

 

정답:

public class Solution {
    List<int> list = new List<int>();
    
    public bool IsPowerOfTwo(int n) {
        int one = 0;

        RevertBinary(n);
                
        for(int i = 0; i < list.Count; i++)
        {
            one += list[i];
        }
        
        if(one == 1)
            return true;
        else
            return false;
    }
    
    public void RevertBinary(int n)        
    {
        while (n != 0)            
        {
            list.Add(n % 2);
            n /= 2;
        }
    } 
}

해설: 2진법으로 변환하며 배열로 저장한 후 각 배열의 총합이 1일경우 true 아닐경우 false을 return한다.

 

수정 코드:

public class Solution {
    int one = 0;
    
    public bool IsPowerOfTwo(int n) {

        RevertBinary(n);           
        
        if(one == 1)
            return true;
        else
            return false;
    }
    
    public void RevertBinary(int n)        
    {
        while (n != 0)            
        {
            one += n % 2;
            n /= 2;
        }
    } 
}

해설: 위와 같지만 배열로 넣지 않고 바로 총합을 구하면 반복문을 두번 사용하지 않아도 풀 수 있다.