개인공부-6

박상훈·2023년 5월 1일
0

개인공부

목록 보기
6/16

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

  • 개인적으로 쉬운 문제인데 바보같이 너무 단순하게 생각해서 틀린 충격으로 포스팅 하게됨.
  • 문제 설명
    1) 페인트 칠을 하는데, 길이가 m인 롤러로 할 것
    2) 꼭 덧칠해야 하는 벽의 번호가 section[]으로 주어짐.
    3) 이 때, 최소한으로 롤러를 돌리는 횟수
    4) ex) m = 4 , sectino[2,3,6] -> 2,3,4,5칠하고 3,4,5,6 칠하는 2번의 return이 나와야함.

2. 초반 접근

  • 전체 벽의 번호가 담긴 n을 활용하지 않겠다는 발상은 좋았음.
    1) section초기 번호부터 끝 번호 까지를 이용해 길이를 구해 나누기를 해버리는 아주 단순무식한 방법으로 오류를 범함
    2) 오류의 이유 -> m = 2, section[2,100]이면 사실 2번만 칠해도 되는건데(2,3),(99,100)
    내 단순한 풀이로 가면 100 - 2 +1 = 99 / 2 = 48 말도 안되는 발상 ( 반성하자 )

3. 풀이

  • m의 길이를 이용해서 처음 시작부터 한번 칠했을 때 마지막 벽의 번호가 중요하다.
    한번 칠했을 때 벽의 번호를 기억하고, 그 번호가 section의 다음 번호보다 작다면 그 번호부터 m만큼 다시 칠하기를 시작하는 것이다.
      int index = 0;
        int answer = 0;

        if(section.length<2) return 1;

     for(int se : section){
         if(index < se){
             answer+=1;
             index = se+m-1;
         }
     }

       return answer;

    }
profile
기록하는 습관

0개의 댓글