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
- 브라이틱스 서포터즈
- 영상제작기
- 데이터 분석
- 혼공학습단
- 데이터분석
- Brigthics
- 삼성 SDS Brigthics
- 삼성SDS Brigthics
- 혼공머신
- Brightics
- Brigthics를 이용한 분석
- 포스코 아카데미
- 팀 분석
- 포스코 청년
- 브라이틱스
- 직원 이직여부
- 직원 이직률
- 삼성SDS Brightics
- 혼공머신러닝딥러닝
- 삼성 SDS
- 캐글
- 추천시스템
- Brightics Studio
- 개인 의료비 예측
- Brigthics Studio
- 혼공
- 삼성SDS
- 노코드AI
- 모델링
- Brightics를 이용한 분석
Archives
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스] Level 2_멀리뛰기(연습문제) 본문
📌문제 유형
연습문제
📌문제
📌나의 문제풀이
1차 시도(93.7, 1개 런타임 에러)
from collections import deque
def factorial(num):
if num == 0:
return 1
a = 1
for i in range(1,num+1):
a *= i
return a
def solution(n):
answer = 1
list_ = [1 for i in range(n)]
list_ = deque(list_)
stop = (len(list_)//2) + (len(list_)%2)
while True:
list_.popleft()
list_.popleft()
list_.append(2)
count_2 = list_.count(2)
count_1 = list_.count(1)
answer += (factorial(len(list_)) // (factorial(count_2) * factorial(count_1)))
if len(list_) == stop:
break
return answer % 1234567
2차 시도(통과)
- factorial(num) : 팩토리얼 구현
- list_의 초기값으로 다 1 넣어주기
- deque로 변경
- stop : while문 멈출 조건, list_가 구성할 수 있는 최소의 개수
- 1차 시도는 while True, 2차 시도는 조건문
- while 조건을 먼저 명시해야 런타임 에러에 안 걸림
- popleft 이용하여 1을 2번 빼주기 -> append로 2 넣기
- list_의 1의 개수, 2의 개수 세기 -> factorial로 answer 계산
from collections import deque
# 팩토리얼 구현
def factorial(num):
if num == 0:
return 1
a = 1
for i in range(1,num+1):
a *= i
return a
def solution(n):
answer = 1
list_ = [1 for i in range(n)]
list_ = deque(list_)
stop = (len(list_)//2) + (len(list_)%2)
while len(list_) > stop:
list_.popleft()
list_.popleft()
list_.append(2)
count_2 = list_.count(2)
count_1 = list_.count(1)
answer += (factorial(len(list_)) // (factorial(count_2) * factorial(count_1)))
return answer % 1234567
📌다른 사람들의 풀이
1) DP 이용
n이 1일 때부터 5일 때까지 나올 수 있는 경우의 수를 차분히 count 해보면 피보나치의 수열 규칙이다.
출처 : https://m.blog.naver.com/chanmuzi/222843477118
def solution(n):
# n=1 일 때 1 반환
if n == 1: return 1
else:
# DP 테이블 초기화
dp = [0] * (n+1)
dp[1] = 1
dp[2] = 2
# 점화식 적용, 숫자가 커지는 것을 방지하기 위해
# 계속해서 나머지 연산자 활용하기
for i in range(3,n+1):
dp[i] = (dp[i-2] + dp[i-1]) % 1234567
# DP 테이블 마지막 값 반환
return dp[-1]
📌리뷰
- while에 조건 걸어서 런타임 줄이기
- deque 앞에서 꺼내는건 popleft 사용(pop은 뒤에서 꺼내는 것)
- 개수 규칙으로 DP 사용 가능
728x90
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스] Level 2_점프와 순간 이동(Summer/Winter Coding(~2018)) (0) | 2022.10.13 |
---|---|
[프로그래머스] Level 2_숫자의 표현(연습문제) (0) | 2022.10.12 |
[프로그래머스] Level2_큰 수 만들기(Greedy) (1) | 2022.10.08 |
[프로그래머스] Level 2_예상 대진표(2017 팁스타운) (1) | 2022.10.08 |
[프로그래머스] Level 2_N개의 최소공배수(연습문제) (1) | 2022.10.08 |
Comments