[Python][프로그래머스 Lv.2] 숫자의 표현

1jinju·2023년 10월 5일
0

프로그래머스

목록 보기
8/14

숫자의 표현

def solution(n):
    answer = 0
    two = [1,2,4,8,16,32,128,256,512,1024,2048,4196,8392]
    if n in two: # n이 2의 제곱일 경우
        return 1
    l = [i for i in range(1, n+1)] # 1~n까지 수
    for j in range(n//2+1): # 더해지는 수가 n//2를 넘어가면 연속하는 자연수 없음
        a = 0
        for i in l:
            a += i # l에 있는 수를 앞에서부터 더함
            if a > n:
                del l[0]
                break
            if a == n: # 더한 수가 n과 같아지면 answer에 +1
                answer += 1
                del l[0] # 리스트 첫 번째 값 삭제
                break
    return answer + 1 # 자기자신도 조건을 만족하므로 +1

2의 제곱일 경우 무조건 자기자신만 조건을 만족하므로 1을 return
10,000보다 작거나 같은 2의 제곱이 많지는 않아서 직접 계산함

2의 제곱 판별

def two(N):
  num = 1
  while True:
      # 2의 제곱이면 1 return
      if num == N:
          return 1
          break

      # 2의 제곱이 아니면 0 return
      elif num > N:
          return 0
          break
      num *= 2

다른 사람의 풀이

def expressions(num):
    answer = 0
    for i in range(1, num+1):
        summ = 0
        
        # i부터 1씩 증가하며 합이 num보다 작을 때까지 더함
        while (summ < num):
            summ += i
            i += 1
        if summ == num: # 합이 num과 같다면 answer에 +1
            answer += 1
    return answer
profile
아자잣

0개의 댓글