프로그래머스 | 덧칠하기 [파이썬 python]

2023. 4. 21. 16:26·Algorithm/프로그래머스
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음 시도한 코드

def solution(n, m, section):
    range = section[-1] - section[0] + 1
    if range > m:
        answer = sum(divmod(range,m))
    else:
        answer = 1
        
    return answer

주어진 section의 0번째 값과 마지막 -1번의 값을 이용하여 범위를 구하였다.

그 범위가 롤러의 길이 m보다 크면 m으로 나눴을 때 몫과 나머지를 더하면 section[0]부터 section[-1]까지 칠해야 하는 횟수가 된다.

m보다 작거나 같으 1번 칠하면 되므로 answer=1이다.

 

하지만 이 코드에는 아주 큰 문제가 있었다.

예를 들어, 칠해야 하는 칸이 [2, 3, 15, 16]이라면 길이가 4인 롤러로 2부터 16까지 칠하게 된다.

하지만 4부터 14는 칠할 필요가 없기 때문에 이 코드로 구한 답은 최소 횟수가 아니다.

그래서 단순 계산이 아닌 최소 횟수를 구할 수 있는 다른 방법을 생각해야 했다.

 

정답 코드

def solution(n, m, section):
    answer = 1 # 칠하는 횟수
    paint = section[0] # 덧칠 시작점
    for i in range(1, len(section)):
        if section[i] - paint >= m:
            answer += 1
            paint = section[i]
            
    return answer

처음 시도했던 코드에서는 전체 section 범위를 구했지만, 정답 코드에서는 덧칠을 해야하는 구간인 section 요소들 간의 범위를 구하였다.

덧칠 시작점 paint를 section[0]으로 정해놓고 for문을 통해 paint와 section[i] 간의 간격을 구하였다.

 

롤러의 길이 m=4이면, 1, 2, 3, 4를 1번의 칠로 덧칠할 수 있으므로 1번의 칠로 가능한 범위는 4-1=3이므로 m-1이다.

m-1까지 1번으로 가능하므로 m부터는 2번이 되는 것이다.

따라서 section[i]-paint가 m이상이면 answer+1을 해주어야 한다.

 

그럼 1번의 칠을 완료했으므로 다음 칠할 구간을 찾아야 한다.

다음 칠 구간을 찾기 위해 section[i]를 paint 시작점으로 바꾸고 다시 범위를 찾는 과정인 for문을 반복한다.

 

 

반응형
저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 숫자 짝꿍 [파이썬 python]
  • 프로그래머스 | 기사단원의 무기 [파이썬 python]
  • 프로그래머스 | 2021 Dev-Matching: 웹 백엔드 개발자(상반기) | 로또의 최고 순위와 최저 순위 [파이썬 python]
  • 프로그래머스 | 카드 뭉치 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (43)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 덧칠하기 [파이썬 python]
상단으로

티스토리툴바