본문 바로가기

알고리즘 코드리뷰/파이썬

1. 백준_기능개발

import math

def solution(progresses, speeds):
    answer = []
    days = []
    dayCount = 1

    for i in range(len(progresses)):
        days.append(math.ceil((100 - progresses[i]) / speeds[i]))

    standardDay = days.pop(0)
    for day in days:
        if (standardDay >= day):
            dayCount+=1
        else:
            answer.append(dayCount)
            standardDay = day
            dayCount=1

    if (dayCount != 0):
        answer.append(dayCount)

    return answer

순서는 내가 생각했을때, 좀더 확실히 알았으면 좋겠다 라는 순으로 구성하였다.

해당 코드이다. 해당 코드를 보면서 확실히 알았으면 좋겠는걸 뽑아보자.

1. 리스트 자료구조

2. ceil의 정확한 사용법

1. 리스트 자료구조

리스트 자료구조는 배열처럼 취급하며(순서를 가진다) 리스트내 항목 검색 시 걸리는 시간은 선형적으로 증가하므로 대용량 데이터 검색 시에는 실용성이 떨어진다.

리스트의 생성

리스트는 여러개의 값들을 하나의 덩어리로 묶는데 사용되는 집합으로, 새로운 요소를 추가하거나 수정, 삭제 할 수 있다.

꺽쇠 괄호 []안에 콤마(,)로 구분된 값들의 목록으로 표현된다.

 

위의 경우에서는

days = [1, 30]

을 생각해볼수 있다.

리스트의 데이터 추가 : append, insert

append method를 사용하면 리스트의 끝에 데이터를 추가할수 있다.

위의 코드에서는 

answer.append(dayCount)

answer 리스트 끝에는 dayCount라는 값이 추가적으로 달린다.

리스트에서 특정 위치의 항목 꺼내기 : pop(index)

리스트에서 특정 위치(index)의 항목을 꺼내 리턴하고, 리스트에서 삭제한다.

위의 코드에서는 

standardDay = days.pop(0)

days 리스트의 0번째 index의 값을 standardDay에 반환하고 0번째 인덱스 값을 삭제한다.

 

1. Math.ceil

값을 나누다 보면 소수점값으로 나오는것들이 존재한다.

해당 소수점값으로 나오는 값들은 정수로 나누기 위해서는 3가지 방법이 존재한다. 

1. 반올림

Python에서는 반올림을 할때 Math library에 존재하는 round함수를 사용한다.

2. 무조건 올림

역시 Math libraty의 ceil함수를 사용한다. 의미는 천장을 의미하므로 연관지어 생각하면 이해하기 쉽다.

위의 코드에서는 

math.ceil((100 - progresses[i]) / speeds[i])

을 생각하면 된다. 값이 2.3이 나오게 되면 3을 리턴한다.

3. 무조건 내림

floor함수를 사용하고 값이 2.3이면 2를 리턴한다.