Recent Posts
Tags
- 빅데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- Ai
- 프로그래머스
- 네이버부스트캠프
- r
- 난생처음 R코딩&데이터 분석 저서
- python
- 코딩테스트 python
- 이기적
- 인공지능기초다지기
- PY4E
- 파이썬
- 데이터베이스
- AI 플랫폼을 활용한 데이터 분석
- DB
- boostcoures
- 정보처리기사
- Oracle
- 오라클
- 빅분기
- 코딩테스트
- 데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 기초다지기
- 빅데이터분석기사
- 부스트코스
- 이것이 취업을 위한 코딩테스트다 with 파이썬
- SQL
- [멀티잇]데이터 시각화&분석 취업캠프(Python)
- boostcourse
- Machine Learning
- Today
- Total
매일공부
[코딩테스트 python] 그리디 Greedy ; 큰수의 법칙 본문
#저서 : 이것이 취업을 위한 코딩테스트다 with 파이썬
#기출 : 2019 국가 교육기관 코딩 테스트
# 문제
주어진 수들을 M번 더하여 가장 큰 수 만들기.
# 제한사항
- 배열의 특정한 인덱스에 해당하는 수가 연속으로 K번 초과하여 더해질 수 없음.
- 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주
- 첫째 줄 : N(2<= N <= 1,000) M(1<= M <= 10,000) K(1<= K <= 10,000) >> 공백으로 구분
- 둘째 줄 : N개의 자연수 >> 공백으로 구분. 단, 각각의 자연수는 1 ~ 10,000의 수
- 입력으로 주어지는 K는 항상 M보다 작거나 같다
처음 풀이
n, m, k = map(int, input().split())
n_arr = sorted(list(map(int, input().split())), reverse=True)
answer = 0
for i in range(1, m+1):
if i%k == 0:
answer += n_arr[1]
else:
answer += n_arr[0]
print(answer)
이 경우, M의 크기가 100억이 넘어가면 시간 초과!
반복되는 수열을 파악해서 시각복잡도를 줄여함.
> k의 배수의 개수 만큼 1번이 더해지고, 나머지는 0번이 더해짐.
> m // k == 나눈 몫 만큼 가장 큰 수 1번이 더해짐
수정 풀이
n, m, k = map(int, input().split())
n_arr = sorted(list(map(int, input().split())), reverse=True)
answer = n_arr[0]*(m-m//k)+n_arr[1]*(m//k)
print(answer)
=> 반복문도 좋지만 반복되는 수열을 먼저 찾아보는 수학적 아이디어를 생각해보는 것이 효율적!!
'Programming > 코딩테스트' 카테고리의 다른 글
[코딩테스트 python] 그리디 Greedy; 1이 될 때까지 (0) | 2023.04.25 |
---|---|
[코딩테스트 python] 그리디 Greedy; 숫자 카드 게임 (0) | 2023.04.24 |
[코딩테스트] python 주요 라이브러리 정리 (0) | 2023.04.20 |
[코딩테스트 python] 해시 - 완주하지 못한 선수(효율성 개선) (0) | 2023.04.14 |
[코딩테스트 python] 방향이 있는 그래프 순환 구조(DFS) (2) | 2023.04.13 |
Comments