๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Code/Coding Test

[์ด์ฝ”ํ…Œ] 2์ผ์ฐจ Greedy_1์ด ๋  ๋•Œ๊นŒ์ง€, ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ, ๊ณฑํ•˜๊ธฐ ํ˜น์€ ๋”ํ•˜๊ธฐ

by hyelog 2022. 5. 6.

๐Ÿ†Today Code Test


[1] 1์ด ๋  ๋•Œ๊นŒ์ง€๐ŸŸข

  1. ์–ด๋– ํ•œ ์ˆ˜ N์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ์˜ ๋‘ ๊ณผ์ • ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋‹จ, ๋‘ ๋ฒˆ์งธ ์—ฐ์‚ฐ์€ N์ด K๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์งˆ ๋•Œ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. N์—์„œ 1์„ ๋บ€๋‹ค.
    2. N์„ K๋กœ ๋‚˜๋ˆˆ๋‹ค.
  2. N๊ณผ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ N์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ 1๋ฒˆ ํ˜น์€ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— N(2 โ‰ค N โ‰ค100,000)๊ณผ K(2 โ‰ค K โ‰ค 100,000)๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ ๊ฐ๊ฐ ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” N์€ ํ•ญ์ƒ ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— N์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ 1๋ฒˆ ํ˜น์€ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ› Problem Approach

โœ… ์ตœ์†Œ ํšŸ์ˆ˜ โ†’ ์ˆซ์ž๊ฐ€ ๋งŽ์ด ์ค„์–ด๋“œ๋Š” ๋ฐฉ๋ฒ• โ†’ ๋‚˜๋ˆ„๊ธฐ โ†’ ๋‚˜๋ˆ ์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ๋งŒ ๋นผ๊ธฐ ํ•  ๊ฒƒ

๐Ÿ”‘Solution

# 5'
N, K = map(int, input().split())

cnt = 0
while N>0:
  if N%K == 0:
    cnt += 1
    N=N/K
  else:
    cnt += int(N%K)
    N=N//K
print(cnt)
๋‹ค๋ฅธ ํ’€์ด
n, k = map(int, input().split())
result = 0

while True:
	target = (n//k)*k
	result =+= (n-target)
	n = target
	
	if n < k:
		break

	result += 1
	n //= k

result += (n-1)
print(result)

 

[2] ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ ๐ŸŸก

ํ•œ ๋งˆ์„์— ๋ชจํ—˜๊ฐ€ N๋ช… ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ์—์„œ๋Š” N๋ช…์˜ ๋ชจํ—˜๊ฐ€๋ฅผ ๋Œ€์ƒ์œผ๋กœ โ€˜๊ณตํฌ๋„โ€™๋ฅผ ์ธก์ •ํ–ˆ๋Š”๋ฐ, โ€˜๊ณตํฌ๋„โ€™๊ฐ€ ๋†’์€ ๋ชจํ—˜๊ฐ€๋Š” ์‰ฝ๊ฒŒ ๊ณตํฌ๋ฅผ ๋А๊ปด ์œ„ํ—˜ ์ƒํ™ฉ์—์„œ ์ œ๋Œ€๋กœ ๋Œ€์ฒ˜ํ•  ๋Šฅ๋ ฅ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ ์žฅ์ธ ๋™๋นˆ์ด๋Š” ๋ชจํ—˜๊ฐ€ ๊ทธ๋ฃน์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ ์ž ๊ณตํฌ๋„๊ฐ€ X์ธ ๋ชจํ—˜๊ฐ€๋Š” ๋ฐ˜๋“œ์‹œ X๋ช… ์ด์ƒ์œผ๋กœ ๊ตฌ์„ฑํ•œ ๋ชจํ—˜๊ฐ€ ๊ทธ๋ฃน์— ์ฐธ์—ฌํ•ด์•ผ ์—ฌํ–‰์„ ๋– ๋‚  ์ˆ˜ ์žˆ๋„๋ก ๊ทœ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™๋นˆ์ด๋Š” ์ตœ๋Œ€ ๋ช‡ ๊ฐœ์˜ ๋ชจํ—˜๊ฐ€ ๊ทธ๋ฃน์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

  1. ๋™๋นˆ์ด๋ฅผ ์œ„ํ•ด N๋ช…์˜ ๋ชจํ—˜๊ฐ€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฌํ–‰์„ ๋– ๋‚  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃน ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.
  2. ๋ช‡ ๋ช…์˜ ๋ชจํ—˜๊ฐ€๋Š” ๋งˆ์„์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์–ด๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ๋ชจํ—˜๊ฐ€๋ฅผ ํŠน์ •ํ•œ ๊ทธ๋ฃน์— ๋„ฃ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๋ชจํ—˜๊ฐ€์˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. (1 โ‰ค N โ‰ค 100,000)
  • ๋‘˜์งธ ์ค„์— ๊ฐ ๋ชจํ—˜๊ฐ€์˜ ๊ณตํฌ๋„์˜ ๊ฐ’์€ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์ž์—ฐ์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ ์กฐ๊ฑด

  • ์—ฌํ–‰์„ ๋– ๋‚  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃน ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ› Problem Approach

โœ… ์ตœ๋Œ€๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ธธ๋“œ ์› ์ˆ˜ ๋‹ค ๋„ฃ๊ณ  ๊ธธ๋“œ ๊ตฌ์„ฑ

๐Ÿ– ์ตœ๋Œ€ ๊ฐ’์ด๋‹ˆ๊นŒ ์ž‘์€ ๊ฑฐ๋ถ€ํ„ฐ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋งž๋‹ค! โ†’ ์ž‘์€ ๊ธธ๋“œ๋ถ€ํ„ฐ ๋งŒ๋“ค๊ณ , ๊ทธ๋‹ค์Œ ํฐ ๊ธธ๋“œ๋กœ

๐Ÿ”‘Solution

#9'38''
N = int(input())
gathering = sorted(list(map(int, input().split()))[:N],reverse=True)

fear_max = gathering[0]
cnt = 1
count_guild = 1

for i in range(1, N):
  if cnt < fear_max:
    cnt+=1
  else:
    cnt = 1
    fear_max = gathering[i]
    count_guild += 1

print(count_guild)

๐Ÿ› fix ver. ์ž‘์€ ๊ธธ๋“œ ๋ถ€ํ„ฐ

N = int(input())
gathering = sorted(list(map(int, input().split()))[:N])

fear_min = gathering[0]
cnt = 1
count_guild = 0

for i in range(1, N):
  if cnt < fear_min:
    if gathering[i] <= fear_min:
      cnt += 1
  else:
    cnt = 1
    fear_min = gathering[i]
    count_guild += 1
print(count_guild)

๋‹ค๋ฅธ ํ’€์ด

n = int(input())
data = list(map(int, input().split()))
data.sort()

result = 0
count = 0

for i in data: # ๊ณตํฌ๋„๊ฐ€ ๋‚ฎ์€๊ฑฐ ๋ถ€ํ„ฐ 
  count += 1 
  if count >= i: # ํ˜„์žฌ ๋ชจํ—˜๊ฐ€ ์ˆ˜๊ฐ€ ํ˜„์žฌ ๊ณตํฌ๋„ ์ด์ƒ์ด๋ผ๋ฉด ๊ทธ๋ฃน ๊ฒฐ์„ฑ
    result += 1
    count = 0
print(result)

 

[3] ๊ณฑํ•˜๊ธฐ ํ˜น์€ ๋”ํ•˜๊ธฐ ๐ŸŸข

๊ฐ ์ž๋ฆฌ๊ฐ€ ์ˆซ์ž(0 ๋ถ€ํ„ฐ 9)๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•˜๋‚˜์”ฉ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ํ™•์ธํ•˜๋ฉฐ ์ˆซ์ž ์‚ฌ์ด์— โ€˜xโ€™ ํ˜น์€ โ€˜+โ€™์—ฐ์‚ฐ์ž๋ฅผ ๋„ฃ์–ด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

๋‹จ, โ€˜+โ€™๋ณด๋‹ค โ€˜xโ€™์—ฐ์‚ฐ์ž๋ฅผ ๋จผ์ € ๊ณ„์‚ฐํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ๋ชจ๋“  ์—ฐ์‚ฐ์€ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋œ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด ์ง‘๋‹ˆ๋‹ค. (1 โ‰ค S์˜ ๊ธธ์ด โ‰ค 20)

์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ› Problem Approach

โœ… ๊ฐ€์žฅ ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ โ†’ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๊ณฑํ•˜๊ธฐ โ†’ ๊ณฑํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ? โ†’ 0 ํ˜น์€ 1์ผ ๋•Œ(1์€ ๋”ํ•  ๋•Œ ๋” ํฐ ์ˆ˜๊ฐ€ ๋จ!)

๐Ÿ”‘Solution

#8'57''
nums = input()

if nums[0] == '0' or nums[0] == '1':
  total = int(nums[0])+int(nums[1])
  nums = nums[1:]
else:
  total = int(nums[0])

for i in nums[1:]:
  if i == '0' or i  == '1':
    total += int(i) 
  else:
    total *= int(i)

๋‹ค๋ฅธ ํ’€์ด

data = input()

result = int(data[0])

for i in range(1, len(data)):
    num = int(data[i])
    if num <=1 or result <= 1: # ๋‚˜์˜ ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ์ค„๋กœ ํ‘œํ˜„ํ•˜๊ธฐ
        result += num
    else:
        result += num
print(result) 

 

๋Œ“๊ธ€