일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- 컴포즈
- Room
- Di
- 파이썬
- dagger2
- 깃
- Jetpack
- MVVM
- 테스트의 장점
- 제한함수
- Observable
- 유닛테스트
- ViewModel
- 공격적 프로그래밍
- 디자인패턴
- Android
- Python
- 안드로이드
- rxjava
- mock
- UnitTest
- 코딩테스트
- 코틀린
- 안드로이드 디자인패턴
- 안정성
- 단위테스트
- 자료구조
- git
- Kotlin
- compose
- Today
- Total
세상을 바꾸는 개발자
[코딩테스트] 큰수의 법칙(파이썬) 본문
안녕하세요~ 헬창코딩입니다.
요즘은 코딩 테스트를 안 보는 대기업이 거의 없죠
저도 미래를 위에 코딩 테스트 공부를 해보려고 합니다~
처음에 어떤 언어를 사용해볼까 생각하다가 많이 사용하는 언어 말고 새로운 언어를 사용해보자고
생각을 해서 파이썬을 사용하게 되었습니다.
또 코딩 테스트에서 파이썬으로 하면 코드도 간결해지고 구현하기도 편하다고 하네요
그래서 많은 요즘 사람들이 파이썬으로 코딩 테스트를 준비한다고 합니다.~
그리고 제가 참고한 책은 나동빈 님이 저자인 이것이 코딩 테스트다 with 파이썬이라는 책으로 공부를 시작했습니다.
오늘부터 한 문제씩 제가 풀이 한 방식으로 기록을 할 생각입니다.(틀린 부분이 있을 수 있으니 틀리면 말씀해주세요 ㅠ)
자 그럼 바로 시작할게요~
< 큰 수의 법칙 > : 난이도 하
[문제]
동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 방법이다. 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다.
예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때, M이 8이고 K가 3이라고 가정하자.
이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다.
예를 들어 순서대로 3, 4, 3, 4, 3으로 이루어진 배열이 있을 때 M이 7이고 K가 2라고 가정하자. 이 경우 두 번째 원소에 해당하는 4와 네 번째 원소에 해당하는 4를 번갈아 두 번씩 더하는 것이 가능하다.
결과적으로 4 + 4 + 4 + 4 + 4 + 4 + 4 인 28이 도출된다.
배열의 크기 N, 숫자가 더해지는 횟수 M, 그리고 K가 주어질 때 동빈이의 큰 수의 법칙에 따른 결과를 출력하시오.
[입력 조건]
- 첫째 줄에 N(2 <= N <= 1000), M(1 <= M <= 10000), K(1 <= K <= 10000)의 자연수가 주어지며 각자 연수는 공백으로 구분한다.
- 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분한다.
단, 각각의 자연수는 1 이상 10000 이하의 수로 주어진다.
입력으로 주어지는 K는 항상 M보다 작거나 같다.
[출력 조건]
- 첫째 줄에 동빈이의 큰 수의 법칙에 따라 더해진 답을 출력한다.
[입력 예시] [출력 예시]
5 8 3 46
2 4 5 4 6
[나만의 풀이]
number_list = list(map(int,input("숫자 리스트를 입력해주세요").split()))
number_list.sort()
number_list.reverse()
M = int(input("전체 실행횟수 입력하세요"))
K = int(input("최대값을 한번에 더할 수 있는 횟수를 입력하세요"))
SUM = 0
flag = True
while M > 0:
max_count = K
if(flag):
while max_count > 0:
if(max_count > M):
break
SUM = SUM + number_list[0]
print("%d" % number_list[0])
M -= 1
max_count -= 1
flag = False
else:
SUM = SUM + number_list[1]
print("%d" % number_list[1])
M -= 1
flag = True
print("전채합은 :: %d 입니다" %SUM)
실행결과
< 나의 풀이방법 >
저는 가장 먼저 사용자에게 필요한 값들을 입력을 받고 그중 입력받은 리스트를 큰 수 순서대로 로 정렬을 했습니다.
그 이유는 이 문제는 가장 큰 2개의 수만 사용하기 때문입니다. 그래서 리스트를
가장 큰 수로 정렬을 한 다음 0번째 인덱스와 1번째 인덱스를 사용하는 것을 조건문으로 구현해서 풀었습니다.
참고한 책주소
https://book.naver.com/bookdb/book_detail.nhn?bid=16439154
'코딩테스트 > Python' 카테고리의 다른 글
[코딩테스트] 왕실의 나이트 (파이썬) (1) | 2021.09.01 |
---|---|
[코딩테스트] 시각 (파이썬) (0) | 2021.09.01 |
[코딩테스트] 상하좌우(파이썬) (3) | 2021.08.30 |
[코딩테스트] 1이 될때까지(파이썬) (0) | 2021.08.30 |
[코딩테스트] 숫자 카드게임(파이썬) (0) | 2021.08.30 |