세상을 바꾸는 개발자

[코딩테스트] 큰수의 법칙(파이썬) 본문

코딩테스트/Python

[코딩테스트] 큰수의 법칙(파이썬)

헬창코딩 2021. 8. 30. 19:55

안녕하세요~ 헬창코딩입니다. 

요즘은 코딩 테스트를 안 보는 대기업이 거의 없죠 

 

저도 미래를 위에  코딩 테스트 공부를 해보려고 합니다~ 

처음에 어떤 언어를 사용해볼까 생각하다가 많이 사용하는 언어 말고 새로운 언어를 사용해보자고

생각을 해서 파이썬을 사용하게 되었습니다.

 

또 코딩 테스트에서 파이썬으로 하면 코드도 간결해지고 구현하기도 편하다고 하네요 

그래서 많은 요즘 사람들이 파이썬으로 코딩 테스트를 준비한다고 합니다.~ 

 

그리고 제가 참고한 책은 나동빈 님이 저자인 이것이 코딩 테스트다 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

Comments