1. 큰수의 법칙 문제
#큰 수의 법칙
N, M, K = map(int,input().split())
b = list(map(int, input().split()))
a = sorted(b, reverse = True)
sum = 0
while(M > 0):
for _ in range(K):
sum += a[0]
M -=1
#중간에 M이 0이 될 수도 있는데, 그걸 생각하지 못했다. 여기에 if m == 0: 을 넣어주면 좋을 것 같다.
sum += a[1]
M-=1
print(sum)
#큰 수의 법칙을 반복되는 수열에 집중하여 푸는 방법
n,m,k = map(int,input().split())
b = list(map(int,input().split()))
a = sorted(b, reverse = True)
sum = 0
count = int(m/(k+1)) * k + m%(k+1)
sum += count * a[0]
sum += (m - count) * a[1]
print(sum)
#이중반복문을 간단한 수식으로 바꿀 수 있었다.
#"반복되는 수열"의 특징을 이용하여 "가장 큰 수가 수열에서 나오는 횟수"를 구할 수 있었다.
#총 길이를 반복되는 수열의 길이로 나누고 k를 곱한 것과 나머지를 더하면 가장 큰 수가 수열에서 나오는 횟수다.
#수열이 반복되는 경우 이런 식으로 풀 수 있을 것이다.
2. 숫자 카드 게임
n,m = map(int,input().split())
#이차원배열을 어떻게 받아올 수 있을까 고민하였다.
#반복문으로 일차원 배열을 받아서 해결할 수 있었다.
#각 배열의 최소값끼리 비교하여 큰 값을 찾는 것을 생각했다.
max = 0
for i in range(n):
data = list(map(int,input().split()))
if min(data) > max:
max = min(data)
#max = max(max, min(data))를 통해서 나타낼 수도 있다. 훨씬 짧은 코드다.
print(max)
핵심은 각 행마다 가장 작은 수를 찾은 뒤에 그 수 중에서 가장 큰 수를 찾는 것이다.
3. 1이 될 때까지
n,k = map(int,input().split())
count = 0
while n != 1:
if n%k == 0: #맨 처음에 n/k로 해서 안됐다... 바보... %로 해야지 0으로 되는지 알지...
n = int(n/k)
count = count + 1
else:
n = n - 1
count = count + 1
print(count)
n이 클수록 k로 나누었을때 줄어드는 양이 더 많다.
여기서 중요한 점
최대한 많이 나누어 줘야한다.
최대한 많이 나눠주기 위해서는 n이 k의 배수로 바껴야한다.
바뀌기 위해서는 1을 빼주는 과정을 거친다.
그러니깐 예를 들어서 17을 4로 나눠주기 위해서 1을 빼야지 16을 4로 나눠줄 수 있다.
원래의 수에서 밑의 과정을 거치면 k의 배수가 되는 것이다.
while n%k != 0
n-=1
result+=1
윗 코드의 과정을 빠르게 할 수는 없을까?
target = (n // k) * k
result = n - target
n = target
테크닉: 원래의 수 - k의 배수 = 중간에 1을 빼야하는 횟수가 된다.
이를 통해서 빠르게 구할 수 있다.
#1이될때까지 테크닉사용한 버전
n,k = map(int,input().split())
#빼주고 나눠주고를 반복한다.
result = 0
while True:
#k의 배수가 될때까지 뺴주는 과정을 수식으로 정의했다.
target = (n//k)*k
result = result + n - target
n = target
#만약에 나누는 수보다 작아진다면 빠져나온다.
if n < k:
break
#나누는 수보다 작지않다면 나눠준다.
n = n//k
result = result + 1
#나누는 수보다 작아졌으므로 1이 될때까지의 값을 더해준다.
result = result + (n - 1)
print(result)
'이제는 사용하지 않는 공부방 > Algorithm' 카테고리의 다른 글
[알고리즘] 구현 (0) | 2020.10.03 |
---|---|
[알고리즘] simulated annealing (0) | 2020.10.03 |
[백준] 섬의 개수 (0) | 2020.09.15 |
[프로그래머스] 완전탐색문제: 모의고사 (0) | 2020.09.09 |
백준 8단계 크로아티아알파벳 자바 (0) | 2020.04.18 |