Coding Test/Programmers_JavaScript

[JavaScript/프로그래머스] 연습문제 - 덧칠하기

  • -
728x90

문제 링크

 

프로그래머스

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

programmers.co.kr

 


 

초기 정답 코드 - 로직 설명 주석

// 함수 solution은 세 개의 매개변수를 받습니다.
// n: 전체 섹션의 개수 (정수)
// m: 한 번에 처리할 수 있는 섹션의 범위 (정수)
// section: 처리해야 할 섹션의 목록 (정수 배열)
function solution(n, m, section) {
  // count는 처리된 섹션의 개수를 저장합니다.
  let count = 0;
  // location은 현재 처리 위치를 저장합니다.
  let location = 0;
  
  // section 배열의 길이가 1 이상인 동안 반복합니다.
  while (section.length >= 1) {
    // count를 1 증가시킵니다.
    count += 1;
    // location을 현재 섹션의 인덱스보다 하나 작게 설정합니다.
    location = section[0] - 1;
    
    // location부터 location+m까지 반복합니다.
    for (let i = location; i <= location + m; i++) {
      // 현재 인덱스 i가 section[0]과 같다면,
      if (i === section[0]) {
        // section 배열에서 첫 번째 요소를 제거합니다.
        section.shift();
      }
    }
  }

  // 처리된 섹션의 개수인 count를 반환합니다.
  return count;
}

 


1차 개선 - 코드 구조 변경(주석 제거 버전)

같은 값을 선언하는 count와 location을 한 줄에 선언하도록 구조를 바꾸고,

삼항 연산자를 활용하여 if문을 한 줄로 바꾸어 가독성을 높였습니다.

function solution(n, m, section) {
  let count = (location = 0);

  while (section.length >= 1) {
    count++;
    location = section[0] - 1;

    for (let i = location; i <= location + m; i++) {
      i === section[0] ? section.shift() : null;
    }
  }

  return count;
}

확실히 더 깔끔해진 것 같네요!

 


End

 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.