Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 노코드AI
- 혼공
- Brightics를 이용한 분석
- 삼성SDS Brightics
- 혼공학습단
- Brigthics를 이용한 분석
- 삼성SDS
- Brigthics
- 데이터 분석
- 혼공머신러닝딥러닝
- 브라이틱스
- 포스코 아카데미
- 포스코 청년
- Brightics Studio
- 삼성SDS Brigthics
- 데이터분석
- 모델링
- 팀 분석
- 직원 이직률
- 추천시스템
- 캐글
- 브라이틱스 서포터즈
- 혼공머신
- Brigthics Studio
- 개인 의료비 예측
- 삼성 SDS Brigthics
- 삼성 SDS
- Brightics
- 영상제작기
- 직원 이직여부
Archives
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스] Level2_기능개발(스택/큐) 본문
문제 유형
스택/큐
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
1차시도(27.3)
from collections import deque
def count_return(percent, speed):
ans = 0
while percent[0] <= 100:
for i in range(len(percent)):
percent[i] += speed[i]
for i in range(len(percent)):
if percent[0] >= 100:
percent.popleft()
ans += 1
else:
break
return ans, percent, speed
def solution(progresses, speeds):
answer = []
percent = deque(progresses)
speed = deque(speeds)
while len(list(percent)) > 0:
ans, percent, speed = count_return(percent, speed)
answer.append(ans)
return answer
2차시도(90.9)
from collections import deque
def count_return(percent, speed):
ans = 0
while percent[0] <= 100:
for i in range(len(percent)):
percent[i] += speed[i]
for i in range(len(percent)):
if percent[0] >= 100:
percent.popleft()
speed.popleft() # speed도 같이 제거하기!!!
ans += 1
else:
break
return ans, percent, speed
def solution(progresses, speeds):
answer = []
percent = deque(progresses)
speed = deque(speeds)
while len(list(percent)) > 0:
ans, percent, speed = count_return(percent, speed)
answer.append(ans)
return answer
3차 시도(통과)
- 시간복잡도 적은 deque로 선언
- percent 맨 앞이 100 이상이 되도록 speed 더하기(부호 주의)
- percent 맨 앞이 100 이상이면, popleft로 하나씩 제거(percent, speed 둘 다)
* popleft는 deque 명령어 - percent 길이 0될때까지 반복
from collections import deque
def count_return(percent, speed):
ans = 0
# 리스트의 맨 앞이 100이상이 되도록 speed 더하기
while percent[0] < 100: # 부호!! 100 미만일때까지만 더하기
for i in range(len(percent)):
percent[i] += speed[i]
# 리스트의 맨 앞이 100이상이면 앞에서부터 하나씩 제거(percent, speed 둘 다)
for i in range(len(percent)):
if percent[0] >= 100:
percent.popleft()
speed.popleft()
ans += 1
else:
break # break 없으면 인덱스 오류 발생
return ans, percent, speed
def solution(progresses, speeds):
answer = []
# 시간복잡도 적은 dequeue 선언
percent = deque(progresses)
speed = deque(speeds)
# percent 길이가 0될때까지 반복
while len(list(percent)) > 0:
ans, percent, speed = count_return(percent, speed)
answer.append(ans)
return answer
다른 사람들 풀이
1) time 조건문
def solution(progresses, speeds):
print(progresses)
print(speeds)
answer = []
time = 0
count = 0
while len(progresses)> 0:
if (progresses[0] + time*speeds[0]) >= 100:
progresses.pop(0)
speeds.pop(0)
count += 1
else:
if count > 0:
answer.append(count)
count = 0
time += 1
answer.append(count)
return answer
2) ceil 함수 이용
- ceil : 값 올림하기
- try-except 문으로 IndexError 해결
파이썬 math 모듈 ceil( ), floor( ) 함수 / 실수를 올림, 내림하여 정수를 반환하는 함수
[Python] math.ceil( ) / math.floor( ) 수학의 올림/ 내림 기능을 하는 함수이다. math 모듈을 import 하고서 함수를 사용하면 실수를 올림/내림하여 정수를 반환한다. 사용방법은 두 함수 모두 동일하고 별다
ooyoung.tistory.com
from math import ceil
def solution(progresses, speeds):
daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
count = 1
retList = []
for i in range(len(daysLeft)):
try:
# 리스트 앞이 남은 날짜 적을때
if daysLeft[i] < daysLeft[i + 1]:
retList.append(count)
count = 1
# 남은 날짜가 같을 때
else:
daysLeft[i + 1] = daysLeft[i]
count += 1
# 인덱스 에러 해결
except IndexError:
retList.append(count)
return retList
3) 풀이 유사
def solution(progresses, speeds):
answer = []
while progresses:
days = 1
for i in range(len(speeds)):
progresses[i] += speeds[i]
cnt = 0
while progresses:
if progresses[0] >= 100:
progresses.pop(0)
speeds.pop(0)
cnt += 1
else:
break
if cnt:
answer.append(cnt)
return answer
4) 유사
from collections import deque
def solution(progresses, speeds):
answer = []
progresses = deque(progresses)
speeds = deque(speeds)
while progresses:
a=0
while 1:
if progresses[0] >= 100:
a+=1
progresses.popleft()
speeds.popleft()
if len(progresses) == 0 and a >0:
answer.append(a)
break
else:
if a>0:
answer.append(a)
for i in range(len(progresses)):
progresses[i]+=speeds[i]
break
return answer
리뷰
- 큐에 대한 기본적인 개념 이해
파이썬에서 큐(queue) 자료 구조 사용하기
Engineering Blog by Dale Seo
www.daleseo.com
- 인덱스 오류는 try-except문으로 해결할 수 있음
- ceil : 숫자 올림하기
728x90
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스] Level 2_주식가격(스택/큐) (1) | 2022.09.08 |
---|---|
[프로그래머스] Level 2_프린터(스택/큐) (0) | 2022.09.04 |
[프로그래머스] Level 1_실패율 (0) | 2022.08.16 |
[프로그래머스] Level 1_폰켓몬 (0) | 2022.07.17 |
[프로그래머스] Level 1_문자열 내 마음대로 정렬하기 (0) | 2022.07.15 |
Comments