[프로그래머스 | 파이썬 / 자바스크립트] 덧칠하기(연습문제 / level 2)

2023. 3. 12. 21:10·Problem Solving/프로그래머스
반응형
문제

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

 

프로그래머스

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

programmers.co.kr

 

 

🐍파이썬
def solution(n, m, section):
    answer = 0
    while section:
        e = section[0]
        while section and e <= section[0] < e+m:
            section.pop(0)
        answer+=1    
    return answer

1️⃣ 변수 e에 section의 가장 첫번째 원소를 대입한다.

2️⃣ section리스트에 원소가 존재하고 있고 section[i]가 section[0]보다 같거나 크고 section[0]+m보다 작은 동안 리스트의 원소를 앞에서부터 제거한다.

3️⃣ 내부 while문을 한 번 돌 때마다 answer값을 증가시킨다.

4️⃣ while문이 모두 종료 시 최종적으로 answer값을 리턴한다.

ex) section = [2, 3, 6], m = 4
1️⃣ 첫번째 while문
e = 2
2 👉 section and 2 <= 2 < 6 ⭕ section = [3, 6]
3 👉 section and  2 <= 3 < 6 ⭕ section = [6]
6 👉 section and  2 <= 6 < 6 ❌ 다음 while문
answer = 1

2️⃣ 두번째 while문
e = 6
6 👉 section and  6 <= 6 < 10 ⭕ section = []
empty 👉 section and  6 <= empty  < 10 ❌ while문 종료
answer = 2

 

 

다른 풀이 방법

from collections import deque
def solution(n, m, section):
    answer = 0
    section = deque(section)
    while section:
        start = section.popleft()
        while section:
            if section[0] >= start + m:
                break
            section.popleft()
        answer += 1
    return answer

pop(0)를 사용하는 대신 deque의 popleft()를 사용했다.(시간효율성↑)

 

 

🐥자바스크립트
function solution(n, m, section) {
    var answer = 0;
    while(section.length > 0){
        e = section[0];
        while(section.length > 0 && e <= section[0] && section[0] < e+m){
            section.shift();    
        }
        answer++;
    }
    return answer;
}

1️⃣ 변수 e에 section의 가장 첫번째 원소를 대입한다.

2️⃣ section리스트에 원소가 존재하고 있고 section[i]가 section[0]보다 같거나 크고 section[0]+m보다 작은 동안 리스트의 원소를 앞에서부터 제거한다.

3️⃣ 내부 while문을 한 번 돌 때마다 answer값을 증가시킨다.

4️⃣ while문이 모두 종료 시 최종적으로 answer값을 리턴한다.

ex) section = [2, 3, 6], m = 4
1️⃣ 첫번째 while문
e = 2
2 👉 section and 2 <= 2 < 6 ⭕ section = [3, 6]
3 👉 section and  2 <= 3 < 6 ⭕ section = [6]
6 👉 section and  2 <= 6 < 6 ❌ 다음 while문
answer = 1

2️⃣ 두번째 while문
e = 6
6 👉 section and  6 <= 6 < 10 ⭕ section = []
empty 👉 section and  6 <= empty  < 10 ❌ while문 종료
answer = 2

 

 

다른 풀이 방법

function solution(n, m, section) {
    let count = 0;
    const arr = Array.from(Array(n+1).fill(null));
    // n = 4, arr = [ null, null, null, null, null ]
   
   section.forEach(el =>{
        arr[el] = 1;
    })
    // section = [1, 2, 3, 4], arr = [ null, 1, 1, 1, 1 ]
   
   section.forEach(el=>{
        if(arr[el]){    //null이 아닌 원소만 처리
            arr.fill(null, el, el+m); // fill(채울값, 시작인덱스, 끝인덱스)
            count++;
        }
    })
    return count;
}

 

 

추가
자바스크립트/파이썬 별로 조건설정하는 방식이 달라서 while문 내의 조건설정을 알맞게 하는 법을 찾는 데 시간이 많이 걸렸다.

1. 빈 배열 체크
🐍 파이썬
while(section)	#section 내 원소가 존재하면 true, 원소가 없으면 false
🐥자바스크립트
// while(section) 동작하지 않는 코드
while(section.length > 0)	//배열 길이를 이용해 빈배열 체크. 정상동작하는 코드
2. a <= x < b
🐍 파이썬
e <= section[0] < e+m	#문제없이 동작한다.

🐥자바스크립트

// e <= section[0] < e+m 동작하지 않는 코드
e <= section[0] && section[0] < e+m	//이렇게 수정해야 한다.​

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Problem Solving > 프로그래머스' 카테고리의 다른 글

[프로그래머스 | 파이썬 / 자바스크립트] 평행(코딩테스트 입문 / level 0)  (0) 2023.03.16
[프로그래머스 | 파이썬 / 자바스크립트] 다리를 지나는 트럭(스택/큐 / level 2)  (0) 2023.03.16
[프로그래머스 | 파이썬 / 자바스크립트] [3차] 파일명 정렬(2018 KAKAO BLIND RECRUITMENT / level 2)  (0) 2023.03.15
[프로그래머스 | 파이썬 / 자바스크립트] 겹치는 선분의 길이(코딩테스트 입문/ level 0)  (0) 2023.03.12
[프로그래머스 | 파이썬 / 자바스크립트] [3차] 압축(2018 KAKAO BLIND RECRUITMENT/ level 2)  (2) 2023.03.11
[프로그래머스 | 파이썬 / 자바스크립트] 롤케이크 자르기(연습문제/ level 2)  (0) 2023.03.11
'Problem Solving/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 | 파이썬 / 자바스크립트] 다리를 지나는 트럭(스택/큐 / level 2)
  • [프로그래머스 | 파이썬 / 자바스크립트] [3차] 파일명 정렬(2018 KAKAO BLIND RECRUITMENT / level 2)
  • [프로그래머스 | 파이썬 / 자바스크립트] 겹치는 선분의 길이(코딩테스트 입문/ level 0)
  • [프로그래머스 | 파이썬 / 자바스크립트] [3차] 압축(2018 KAKAO BLIND RECRUITMENT/ level 2)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    포트폴리오
    뉴렉처
    React
    백준
    컴퓨터네트워크
    웹사이트
    강의내용정리
    알고리즘
    공식문서
    spring boot
    bfs
    자바
    d3
    Til
    프로젝트
    ZeroCho
    클론 프로젝트
    플러터
    SWEA
    파이썬
    프로그래머스
    Next.js
    mysql
    구현
    리액트
    Jiraynor Programming
    자바스크립트
    타입스크립트
    블로그 제작
    AWS
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[프로그래머스 | 파이썬 / 자바스크립트] 덧칠하기(연습문제 / level 2)
상단으로

티스토리툴바