programmers- lv.2 (숫자의 표현)

이예송·2023년 7월 28일

PS

목록 보기
66/97

문제링크: 숫자의 표현

✍🏻 Information

content
언어python
난이도⭐️⭐️⭐️
풀이시간40분
제출횟수
인터넷검색유무no




🍒 My Code

  • 처음 작성한 코드
def solution(n):
    answer = 0
    final = 0
    for i in range(n):
        if i*(i+1)/2>=n:
            final = i
            if i*(i+1)/2==n:
                answer+=1
            break
    for i in range(2, final):
        for j in range(1,n//2+1):
            if sum(range(j,j+i))>=n:
                if sum(range(j,j+i))==n:
                    answer+=1
                break
    return answer+1 #자기자신
  • 규칙을 바탕으로 작성한 코드
def solution(n):
    answer = 0
    for i in range(2,n):
        if sum(range(1,i+1))>n:
            break
        if (n-sum(range(1,i+1)))%i==0:
            answer+=1
    return answer+1




💡 What I learned

  • 처음 작성한 코드가 효율성 테스트에서 시간초과가 나서 break를 붙여줌으로써 시간을 줄여주려고 하다보니 더러운 코드가 되어버렸다. 시간을 줄인 코드를 작성하고픈 마음+규칙이 분명 있을것 같아서 이를 찾고 싶은 마음에 새로 코드를 작성하였다.
  • 내가 발견한 규칙은 1부터 num까지의 합부터 num의 배수만큼을 더한수는 num개의 연속된 수로 그 수를 표현할 수 있다는 것이다.
    ex) 연속된 2개로 합을 만들 수 있음: (1+2)+2i [i는 >=0인 자연수]
    ex) 연속된 3개로 합을 만들 수 있음: (1+2+3)+3
    i [i는 >=0인 자연수]
    ex) 연속된 4개로 합을 만들 수 있음: (1+2+3+4)+4i [i는 >=0인 자연수]
  • 다른 사람 풀이
return len([i for i in range(1,num+1,2) if num % i is 0])

ㄴ> 맞는 풀이인건지 모르겠다

def expressions(num):
    answer = 0
    for i in range(1, num+1):
        summ = 0
        while (summ < num):
            summ += i
            i += 1
        if summ == num:
            answer += 1
    return answer

ㄴ> 일일히 계산한 코드지만 내가 처음 작성한 코드보다 시간 효율면에서 좋다

0개의 댓글