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

[์ด์ฝ”ํ…Œ] 1์ผ์ฐจ Greedy _ ํฐ ์ˆ˜์˜ ๋ฒ•์น™, ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„

by hyelog 2022. 5. 4.

๐Ÿ†Today Code Test


[1] ํฐ ์ˆ˜์˜ ๋ฒ•์น™ ๐ŸŸข

๋™๋นˆ์ด์˜ ํฐ ์ˆ˜์˜ ๋ฒ•์น™์€ ๋‹ค์–‘ํ•œ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ ์ฃผ์–ด์ง„ ์ˆ˜๋“ค์„ M๋ฒˆ ๋”ํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ•์น™์ด๋‹ค. ๋‹จ, ๋ฐฐ์—ด์˜ ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ์—ฐ์†ํ•ด์„œ K๋ฒˆ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋”ํ•ด์งˆ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด ์ด ๋ฒ•์น™์˜ ํŠน์ง•์ด๋‹ค.

๋ฐฐ์—ด์˜ ํฌ๊ธฐ N, ์ˆซ์ž๊ฐ€ ๋”ํ•ด์ง€๋Š” ํšŸ์ˆ˜ M, ๊ทธ๋ฆฌ๊ณ  K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋™๋นˆ์ด์˜ ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์ž…๋ ฅ ์กฐ๊ฑด

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

์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๋™๋นˆ์ด์˜ ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ ๋”ํ•ด์ง„ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ› Problem Approach

โœ… ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด? → ๋ฐฐ์—ด ์•ˆ ํฐ ์ˆ˜๋ฅผ ๋”ํ•ด์•ผ → ๋ฐฐ์—ด์—์„œ ํฐ ์ˆ˜๋ฅผ ์ฐพ์œผ๋ ค๋ฉด? → ์ •๋ ฌํ•ด์•ผ

โœ… ์—ฐ์†ํ•ด์„œ K๋ฒˆ์„ ๋ฐฐ์—ด ์•ˆ ์ œ์ผ ํฐ ์ˆ˜๋ฅผ ๋”ํ•˜๊ณ  → ๊ทธ ๋‹ค์Œ ํฐ ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๋”ํ•˜๊ณ (์ตœ๋Œ€ ์—ฐ์† ๊ฐ’ ์„ค์ • ๋•Œ๋ฌธ) → ๋‹ค์‹œ ํฐ ์ˆ˜๋กœ

๐Ÿ”‘Solution

N,M,K = map(int, input().split())
array = sorted(list(map(int, input().split()))[:N])

total = 0
cnt = 0

for i in range(M):
  if cnt < K:
    cnt += 1
    total += array[-1]
  else:
    cnt = 0
    total += array[-2]
print(total)

[2] ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„ ๐ŸŸข

์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ ์ค‘์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž๊ฐ€ ์“ฐ์ธ ์นด๋“œ ํ•œ ์žฅ์„ ๋ฝ‘๋Š” ๊ฒŒ์ž„์ด๋‹ค.

๋‹จ, ๊ฒŒ์ž„์˜ ๋ฃฐ์„ ์ง€ํ‚ค๋ฉฐ ์นด๋“œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•˜๊ณ , ๋ฃฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์ˆซ์ž๊ฐ€ ์“ฐ์ธ ์นด๋“œ๋“ค์ด N x M ํ˜•ํƒœ๋กœ ๋†“์—ฌ ์žˆ๋‹ค. ์ด๋•Œ N์€ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, M์€ ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  2. ๋จผ์ € ๋ฝ‘๊ณ ์ž ํ•˜๋Š” ์นด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํ–‰์„ ์„ ํƒํ•œ๋‹ค.
  3. ๊ทธ๋‹ค์Œ ์„ ํƒ๋œ ํ–‰์— ํฌํ•จ๋œ ์นด๋“œ๋“ค ์ค‘ ๊ฐ€์žฅ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์นด๋“œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•œ๋‹ค.
  4. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ์— ์นด๋“œ๋ฅผ ๊ณจ๋ผ๋‚ผ ํ–‰์„ ์„ ํƒํ•  ๋•Œ, ์ดํ›„์— ํ•ด๋‹น ํ–‰์—์„œ ๊ฐ€์žฅ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์นด๋“œ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์„ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž์˜ ์นด๋“œ๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋„๋ก ์ „๋žต์„ ์„ธ์›Œ์•ผ ํ•œ๋‹ค.

N x M ํ˜•ํƒœ๋กœ ๋†“์—ฌ์žˆ์„ ๋•Œ, ๊ฒŒ์ž„์˜ ๋ฃฐ์— ๋งž๊ฒŒ ์นด๋“œ๋ฅผ ๋ฝ‘๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์‹œ์˜ค.

์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ์ˆซ์ž ์นด๋“œ๋“ค์ด ๋†“์ธ ํ–‰์˜ ๊ฐœ์ˆ˜ N๊ณผ ์—ด์˜ ๊ฐœ์ˆ˜ M์ด ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ๊ฐ๊ฐ ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 100)
  • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์นด๋“œ์— ์ ํžŒ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ˆซ์ž๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„์˜ ํ‹€์— ๋งž๊ฒŒ ์„ ํƒํ•œ ์นด๋“œ์— ์ ํžŒ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ› Problem Approach

โœ… ํ–‰ ๋ณ„๋กœ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜ ์„ ํƒ → ๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์›ํ•˜๋Š” ๋‹ต

โœ… ํ–‰์ด ๋„˜์–ด๊ฐˆ ๋•Œ ๋งˆ๋‹ค local min๊ฐ’์ด ์ด์ „ min ๊ฐ’ ๋ณด๋‹ค ํฌ๋‹ค๋ฉด result ๋ณ€๊ฒฝ

๐Ÿ”‘Solution

N,M = map(int, input().split())
cards = [sorted(list(map(int, input().split()))[:M]) for i in range(N)]

result = cards[0][0]

for i in range(1,N):
  if cards[i][0] > result:
    result = cards[i][0]
print(result)

๋Œ“๊ธ€