이것이 취업을 위한 코딩 테스트다 with 파이썬
📍예제3 : 숫자 카드 게임
✅N * M 크기의 2차원 배열에서 각 row에서는 가장 작으면서 전체적인 최댓값을 구하라
1 <= N, M <= 100
2차원 배열의 원소는 모두 1만 이하의 자연수
✅코드
n, m = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
max_num = 0
for row in board:
max_num = max(max_num, min(row))
print(max_num)
"""
입력
3 3
3 1 2
4 1 4
2 2 2
출력
2
입력
2 4
7 3 1 8
3 3 3 4
출력
3
"""
📍예제4 : 1이 될 때까지
✅ 2 <= N, K <= 100000 가 주어질 때, 아래 연산을 최소 몇번 반복해서 N을 1로 만들 수 있는지 구하라
- N에서 1 빼기
- N을 K로 나누기 (N이 K의 배수일 때만 가능)
✅최대한 많이 나누기
숫자를 빠르게 줄이기 위해 나누기를 먼저 실행
✅naive solution
매번 N -= 1을 실행
n, k = map(int, input().split())
start = n
count = 0
while start != 1:
if start % k == 0:
start = int(start / k)
else:
start -= 1
count += 1
print(count)
"""
입력
25 5
출력
2
입력
10 3
출력
3
입력
17 4
출력
3
"""
✅refactored solution
N이 K의 배수가 되도록 한번에 빼기
n, k = map(int, input().split())
start = n
count = 0
while True:
# N을 K의 배수로 만들고 그만큼 count에 더하기
target = (start // k) * k
count += (start - target)
start = target
# N 이 K보다 작아지면 반복문 종료
if start < k:
break
count += 1
start //= k
count += (start - 1)
print(count)
"""
입력
25 5
출력
2
입력
10 3
출력
3
입력
17 4
출력
3
"""