Dia Egg - Shugo Chara

Python공부/프로그래머스

(Python) 덧칠하기 (프로그래머스 Lv.1)

별ㅇI 2023. 6. 16. 00:15
728x90
반응형

덧칠하기 (프로그래머스 Lv.1)

https://school.programmers.co.kr/learn/courses/30/lessons/161989

 

프로그래머스

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

programmers.co.kr

 

 내 코드

def solution(n, m, section):
    answer = 0
    wall = [1]*(n+1) #페인트 칠해져있는 부분 1
    wall[0] = 4
    for sec in section:
        wall[sec] = 0 #페인트 칠해야하는 부분 0
    for i in range(1,n+1):
        if wall[i] == 0:
            wall[i] = 1
            answer += 1
            if m != 1:
                for j in range(1,m):
                    if i+j < n: #벽의 범위를 넘어서지 않은 경우
                        wall[i+j] = 1
                    else:
                        return answer
    return answer

칸이 1부터 세기 시작해서 0은 그냥 버리는 칸으로 4 지정해줬다.

페인트 칠해야 할 부분을 0, 칠하지 않아도 되는 부분을 1로 해주고 앞에부터 m크기 만큼 칠해주면 된다. 중요한 점은 버리는 칸 0을 넣어줬기때문에 for문에 n+1까지를 해줘야한다는 점

 

그리고 오늘도 어김 없이 다른 분들이 작성하신 베스트 코드를 찾아봤다.

def solution(n, m, section):
    answer = 1
    prev = section[0]
    for sec in section:
        if sec - prev >= m:
            prev = sec
            answer += 1

    return answer

깔끔... 이 정도면 예술인듯

생각해보니까 앞에서 부터 차근차근 안가도 0인 list, section이 주어졌으니 0인 곳만 방문해보면 되는 거였구나! 했다. 

다음에 꼭 참고해야지

728x90
반응형