[프로그래머스] 숫자의 표현

윤인경·2023년 10월 19일
0

코딩테스트

목록 보기
34/38

처음 작성한 코드

def solution(n):
    answer = 0
    nums = []
    for i in range(1, n+1):
        nums.append(0)
        for j in range(i):
            nums[j] += i
    return answer

for 문으로 전체를 순환하며 동작. 2중 for 문으로 인하여 효율성 검사에서 시간 초과 발생.
따라서 for문을 2중으로 사용하지 않는 방향을 생각해야함.
for 문을 이중으로 사용할 때 n보다 큰 수라 생기면 삭제하는 것을 방향으로 작성하는 것이 좋을 것이라고 예상한다. 삭제를 하더라도 for 문으로 이중으로 사용하게 되는 것인데 의미가 있을까? 효율성에서 n제곱의 형태가 나오는 것은 아닐까?

두번째 작성한 코드

def solution(n):
    answer = 0
    nums = []
    for i in range(1, n+1):
        nums.append(0)
        for j in range(len(nums)):
            nums[j] += i
        while nums[0] >= n:
            if nums[0] == n:
                answer += 1
            print(nums)
            del nums[0]
    return answer

오류를 발생하며 동작을 안했다..
IndexError: list index out of range 오류 발생.
오류 발생의 원인은 while nums[0] >= n에서 발생한 것으로 보인다. 모든 것을 다 지우고도 nums[0]를 찾아서 일것으로 생각하고 있다.
그래서 이 부분을 바꾸고 다시 작성한 다음 코드이다.

세번째 작성한 코드

def solution(n):
    answer = 0
    nums = []
    for i in range(1, n+1):
        nums.append(0)
        for j in range(len(nums)):
            nums[j] += i
        while nums[0] > n:
            del nums[0]
        if nums[0] == n:
                answer += 1
    return answer

오류 없이 효율성 검사도 통과하였다.
nums가 처음 코드에선 계속 해서 더하고 이미 지나간 코드에도 값을 계속 더했기 때문에 for문을 돌아야하는 길이가 n만큼 계속 커졌던 것에 비해 이미 커져서 의미가 없어진 값들은 지워나가기 때문에 그만큼 for 문을 돌 필요성이 사라진다.

profile
코딩 공부 및 프로젝트 정리

0개의 댓글