[프로그래머스] 코딩테스트 Lv1 덧칠하기 [Python]

원준·2023년 4월 28일
0

코딩 테스트

목록 보기
9/18

1. 설명

2. 제한 사항 및 입출력 예

3. 내가 한 코드

  • 아쉽게도 틀렸다.

  • 이전에 카카오 코딩테스트를 기반으로 각각의 위치를 list로 나타내어 실행 했지만, 마지막 시간 초과로 실패 했다.

    • 더 나은 방법을 찾기 위해 여러가지 시도해 봤지만 어떻게 해야할지 감도 오지 않아 시간이 지나서 찾아 봤다.

      def solution(n, m, section):
        answer = 0
      
        n_list = [1] * n
        for i in section:
            n_list[i-1] = 0
        
        while n_list.count(0) > 0:
            n_index = n_list.index(0)
            answer += 1
            for j in range(len(n_list[n_index:n_index+m])):
                n_list[n_index+j] = 1
      
        return answer

    4. 다른 코드

  • 생각 보다 짧아서 많은 충격이 있었다.

  • 설명)

    • section의 첫번째 값에서 1을 뺀 다음 paint의 변수안에 넣는다.
      • 이러는 이유는 첫번째 부터 페인트를 칠하는데 뒷부분이 아닌 앞부분 부터 칠해진다는 가정을 두고 한다는 뜻이다.
    • section안에 있는 값들이 칠해야할 값들이니 v로 받아서 반복문을 돌린다.
    • 처음은 당연히 paint의 값보다 v의 값이 더크다.
    • paint의 값을 v+m (m은 크기) 만큼 더하는데 값이 끝으로 가다보니 오차가 1개 생기므로 -1을 해준다.
      • 이렇게 더해주면 다음 확인할때 크기만큼 했다고 가정할테니 계산하지 않고 넘어가며, 반복문의 크기도 크지 않다.
    • 한번 칠했으니 answer +1 을 해준다.
    def solution(n, m, section):
    paint, answer = section[0]-1, 0
    for v in section:
        if paint < v:
            paint = v+m-1
            answer += 1

    return answer
profile
공부해보자

0개의 댓글