📍 출처 : 이것이 취업을 위한 코딩 테스트다, 나동빈, 2020
- 500원, 100원, 50원, 10원
- N원을 거슬러줄때 최소 동전 개수는?
- 단, N은 10의 배수이다.
N//coin==0
인 경우도 count += N//coin
코드로 통일 가능def exchange(N, coins = [500,100,50,10]):
count = 0
for coin in coins:
if N//coin == 0:
pass
else:
count += N//coin
N = N%coin
return count
print(exchange(1260, coins = [500,100,50,10]))
n = 1260
count = 0
coin_type = [500,100,50,10]
for coin in coin_type:
count += n//coin
n %= coin
print(count)
크기가 N인 배열을 입력받을 때
배열 내부 숫자들을 M번 더한 최대 값은?
단, 동일한 숫자는 연속해서 K번까지만 더할 수 있음. (인덱스가 다르면 다른 숫자로 간주)
N의 범위 : 2~1,000
M의 범위 : 1~10,000
K의 범위 : 1~10,000
배열 내부 자연수의 범위 : 1~10,000
line1 = [5, 8, 3] #[N, M, K]
line2 = [2, 4, 5, 4, 6]
# 첫번째로 큰 수와 두번째로 큰 수만 이용.
line2 = sorted(line2, reverse=True)
first, second = line2[0], line2[1]
big = first * line1[2] + second
result = line1[1] // (line1[2] + 1) * big + line1[1] % (line1[2] + 1) * first
print(result)
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n-1]
second = data[n-2]
# 가장 큰 수가 더해지는 횟수 계산
count = int(m/(k+1))*k
count += m%(k+1)
result = 0
result += count*first #가장 큰 수 더하기
result += (m-count)*second # 두 번째로 큰 수 더하기
print(result)
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n-1]
second = data[n-2]
result = 0
while True:
for i in range(k): #가장 큰 수를 k번 더하기
if m==0:
break
result += first
m -= 1
if m == 0:
break
result += second
m -= 1
print(result)
- 숫자가 쓰인 카드들이 N*M=(행개수)*(열개수) 형태로 놓여잇다.
- 행을 선택하고 카드를 뽑는데
- 선택된 행에 포함된 카드 중 가장 낮을 카드를 뽑아야한다.
- 이때 나올 수 있는 가장 큰 수는?
N과 M의 범위: 1이상 100이하
카드의 숫자는 1이상 10,000이하의 자연수
n, m = map(int, input().split())
data = []
for i in range(n):
data.append(list(map(int, input().split())))
min_num = [min(row) for row in data]
print(max(min_num))
n, m = map(int, input().split())
result = 0
for i in range(n):
data = list(map(int, input().split()))
min_value = min(data)
result = max(result, min_value)
print(result)
n, m = map(int, input().split())
result = 0
for i in range(n):
data = list(map(int, input().split()))
min_value = 10001 # 입력받는 수는 1~10,000 사이
for a in data:
min_value = min(a, min_value)
result = max(result, min_value)
print(result)
어떠한 수 N이 1이 될 때까지 다음의 두 과정중 하나를 반복적으로 수행한다. 이 과정의 최소 횟수는?
1. N을 K로 나눈다.(단, N이 K로 나누어떨어질 때만)
2. N에서 1을 뺀다.
N의 범위 : 2~100,000
K의 범위 : 2~100,000
N은 항상 K보다 크거나 같다.
n, k = map(int, input().split())
count = 0
while True:
if n%k == 0:
n /= k
else:
n -= 1
count += 1
if n==1:
break
print(count)
n, k = map(int, input().split())
result = 0
while n>=k:
# N 이 K로 나누어 떨어지지 않는다면 N에서 1을 빼기
while n % k != 0:
n -= 1
result += 1
n //= k
result += 1
# 마지막 남은 수에 대하여 1씩 빼기
while n > 1:
n -= 1
result += 1
print(result)
n, k = map(int, input().split())
result = 0
while True :
# n==(k로 나누어떨어지는 수)가 될 때까지 1씩 빼기
target = (n//k)*k
result += (n-target)
n = target
# n<k일때 반복문 탈출
if n < k:
break
#k로 나누기
n //= k
result += 1
# 마지막으로 남은 수에 대하여 1씩 빼기
result += (n-1)
print(result)