코딩문제풀이/파이썬
[프로그래머스] 덧칠하기 (파이썬)
오늘밤공부
2023. 4. 7. 10:00
반응형
🗓️ 문제 설명
- 어느 학교에 페인트가 칠해긴 길이가 n미터인 벽이 있는데, 페인트가 벗겨져 벽에 페인트를 덧칠하기로 했습니다.
- 전체 벽을 새로 칠하는 대신, 일부 지역만 칠하고자 합니다.
- 이를 위해 벽은 1미터 길이의 구역 n개로 나누고, 각 구역에 왼쪽부터 순서대로 1번부터 n번까지 번호를 붙였습니다.
- 벽에 페인트를 칠하는 롤러의 길이는 m미터이고, 롤러로 벽에 페인트를 한 번 칠하는 규칙은 다음과 같습니다.
- 롤러가 벽을 벗어나면 안 됩니다.
- 구역의 일부분만 포함되도록 칠하면 안 됩니다.
- 현재 페인트를 칠하는 구역들을 완전히 칠한 후 벽에서 롤러를 떼면 이를 벽을 한 번 칠했다고 정의합니다.
- 한 구역에 페인트를 여러 번 칠해도 되고 다시 칠해야 할 구역이 아닌 곳에 페인트를 칠해도 되지만, 다시 칠하기로 정한 구역은 적어도 한 번 페인트칠을 해야 합니다.
- 정수 n, m과 다시 페인트를 칠하기로 정한 구역들의 번호가 담긴 정수 배열 section이 매개변수로 주어질 때 롤러로 페인트칠해야 하는 최소 횟수를 반환하세요.
- 제한 사항
- 1 ≤ m ≤ n ≤ 100000
- 1 ≤ section의 길이 ≤ n
- 1 ≤ section의 원소 ≤ n
- section의 원소는 페인트를 다시 칠해야 하는 구역의 번호
- section에서 같은 원소가 두 번 이상 나타나지 않음
- section의 원소는 오름차순으로 정렬
- 입출력 예시
n | m | section | result |
8 | 4 | [2, 3, 6] | 2 |
5 | 4 | [1, 3] | 1 |
4 | 1 | [1, 2, 3, 4] | 4 |
💻 코드
최종 코드
코드 풀이
다른 사람 풀이
더보기

풀이 1번

- 2번줄 : answer에 1을 더한 값으로 시작
- 3번줄 : prev에 section의 첫 값을 저장
- 4번줄 : section에서 값을 하나씩 꺼내는 반복문 시행
- 5~7번줄 : sec에서 prev를 뺀 값이 m과 같거나 크다면 prev를 sec으로 변경하고 1을 더함
sec에서 prev를 뺀 값은 한번에 칠할 수 있는 범위이기 때문에 이 범위가 m보다 같거나 크다면 1회 페인트칠을 한 것으로 볼 수 있기 때문에 다음 범위를 확인하기 위해 prev를 sec로 변경하고 answer에 1을 더합니다.
⚙️ 시행착오
1차 시도
더보기


- 테스트 결과 : 시간초과(50%)
2차 시도
더보기


- 테스트 결과 : 시간초과(8%)
반응형