• 분류 전체보기 (512)
    • 개발남노씨(Coding Test) (6)
    • 고농축 백엔드 (17)
    • 재귀함수 DFS 총정리 (1)
    • 프론트엔드 날개달기:Vuejs.React (1)
    • 훈훈한 javascript (5)
    • 렛츠기릿 자바스크립트 (18)
    • 나도코딩 (1)
      • 웹 스크래핑 (1)
    • 프로그래머스(자바스크립트) (41)
      • LV.0(자바스크립트) (41)
    • 프로그래머스(자바) (121)
      • LV.0(자바) (56)
      • LV.1(자바) (41)
      • LV.2(자바) (23)
    • 프로그래머스(파이썬) (127)
      • LV.0(파이썬) (46)
      • LV.1(파이썬) (51)
      • LV.2(파이썬) (30)
    • 임시저장소 (31)
    • 프로젝트 (0)
    • 자바 알고리즘 (13)
      • 알고리즘 직빵 자바 문법 (10)
      • String(문자열) (3)
    • 파이썬 알고리즘 (93)
      • 알고리즘 직빵 파이썬 문법 (20)
      • 알고리즘 백준 (2)
      • 파이썬 알고리즘(사고력기르기) (6)
      • 파이썬 탐색 & 시물레이션 (8)
      • 이분탐색 & 그리디 알고리즘 (10)
      • 스택, 큐, 해쉬, 힙 (10)
      • 완전탐색과 DFS기초 (12)
      • DFS, BFS 활용 (19)
      • 동적계획법 (6)
    • 자바 (27)
      • Java TPC(생각하고, 표현하고, 코딩하고) (17)
      • Java (중요하고, 이해 안 되고, 어려운) (10)
    • 스프링 (5)
      • 스프링 MVC 패턴 2편 (5)
hELLO · Designed By 정상우.
@@#@@

기록용 블로그

프로그래머스(파이썬)/LV.2(파이썬)

기능 개발→ deque, 이중 while문★, 미친 for문★, 갱신★

2022. 12. 27. 22:36

나의 풀이

from collections import deque
import math
def solution(progresses, speeds):
    tmp=[]
    for x in progresses:
        tmp.append(100-x)
    

    required_days=[math.ceil(x/y) for x,y in zip(tmp, speeds)]
   
    que=deque(required_days)
    print(que)
    #deque([7, 3, 9, 4, 1, 5])

    result = []
    #que에 있는 값을 소거하는 방법으로 접근 
    while que:
        count = 0
        #최초 first는 7이다.
        #두번째 first는 9이다. 
        first = que[0]
        
        
        #첫번째 7<=7이다.
        #두번째 3<=7 
        while que and que[0] <= first:
            que.popleft()
            count += 1
        #작은 cycle이 끝난 경우 
        result.append(count)
  
    return result

문제 보충자료

 

아래의 테스트 케이스를 이해하면 맞출 수 있음 
예제 1)
progresses : [40, 93, 30, 55, 60, 65]
speeds : [60, 1, 30, 5 , 10, 7]
return : [1,2,3]

예제 2)
progresses : [93, 30, 55, 60, 40, 65]
speeds : [1, 30, 5 , 10, 60, 7]
return : [2,4]

 

 

 

 

다른 사람의 풀이 

from collections import deque
import math
def solution(progresses, speeds):
    answer = []
    days = []
    for i in range(len(progresses)):
        days.append(math.ceil((100-progresses[i])/speeds[i]))
    print(days)

    first = days[0]
    cnt = 0
    # [7, 3, 9, 4, 1, 5]
    for day in days:
        #1번 for문을 순회하면서 7,3일 때 cnt+=1이 두번 작용하고
        #4번 4,1,5 일때 cnt+=1 3번 작용하고, day요소는 끝이났고, else문의 1번과  if문의 cnt 3번이 합쳐져 cnt=4가 된 것을 for문을 완전히 빠져나왔을때 저장해준다. 
        if day <= first:
            cnt+=1
        else:
            #2번 9일 때 7,3을 2번 카운트 한것이 리스트에 저장된다.
            answer.append(cnt)
            print(answer)
            #3번 9 자신을 cnt하면서 cnt=1로 reset한다. 
            cnt = 1
            first = day
    
    answer.append(cnt)
   
    return answer



progresses = [93, 30, 55, 60, 40, 65]
speeds = [1, 30, 5 , 10, 60, 7]


print(solution(progresses, speeds))
저작자표시 비영리 변경금지 (새창열림)

'프로그래머스(파이썬) > LV.2(파이썬)' 카테고리의 다른 글

뉴스 클러스터링→isalpha(), str1[i:i+2], set(), count()★★  (0) 2022.12.28
프린터 → 응급실(큐)+리스트 컴프리핸션 + enumerate()+ any()★★  (0) 2022.12.28
튜플→Counter, 정규식, most_common(), split()★★  (0) 2022.12.27
위장★★→ Counter(), reduce() 모든 요소의 곱 + 모든 요소에 +1  (0) 2022.12.27
괄호 회전하기★★→ rotate() 사용O + rotate() 사용X 문자열 밀기  (0) 2022.12.27
    '프로그래머스(파이썬)/LV.2(파이썬)' 카테고리의 다른 글
    • 뉴스 클러스터링→isalpha(), str1[i:i+2], set(), count()★★
    • 프린터 → 응급실(큐)+리스트 컴프리핸션 + enumerate()+ any()★★
    • 튜플→Counter, 정규식, most_common(), split()★★
    • 위장★★→ Counter(), reduce() 모든 요소의 곱 + 모든 요소에 +1
    @@#@@
    @@#@@
    자바, 스프링, 알고리즘, 깃허브, 파이썬

    티스토리툴바