본문 바로가기

IT 공부/코딩테스트

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

코드

def solution(n, m, section):
    start = section[0]
    end = section[0] + m - 1
    count = 1
    for se in section:
        if start <= se <= end:
            continue
        start = se
        end = se + m -1
        count += 1
    return count

나의 삽질

1. 

for문을 하나하나 돌리면서 리스트를 만들고 ex) [1,2,3,4], [2,3,4,5], [5,6,7,8]...

section의 요소가 들어있으면 count를 해주는 식으로 하려했으나,

역시나 안됐다.

2중 for를 사용하다보니 원하는대로 count를 증가시킬 수 없었다.

(뭘 어떻게 하든 안됐음..)

 

2.

section의 최대 - 최소로 새로운 리스트를 만들어서 m길이만큼 잘라준 횟수로 풀면 된다고 생각했는데, 

n = 8, m = 3, section=[1, 8] 인 경우에는 과하게 횟수가 더해지는 케이스가 발생하게되었다.

 

깨달은 점

다른 사람의 풀이이지만, section에 포인트를 두고  for로 하나하나 움직이는게 아니라, 점프를 한다고 생각하면 문제를 쉽게 풀 수 있었다.

오히려 for문으로 하나하나 접근하는게 독이었다.

그래서 생각을 해서 문제를 풀어야겠다고 생각했다.

뭔가 손으로 코딩하는게 아니라 머리로 코딩..하자..