Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ] Greedy ๊ธฐ์ถœ๋ฌธ์ œ ๋ณธ๋ฌธ

๐Ÿ”ตCoding Test/Algorithm

[ ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ] Greedy ๊ธฐ์ถœ๋ฌธ์ œ

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 6. 16. 19:23

1. ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ 

 ๋ฌธ์ œ

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

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

 

** ๋ชจ๋“  ๋ชจํ—˜๊ฐ€๋ฅผ ํŠน์ •ํ•œ ๊ทธ๋ฃน์— ๋„ฃ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ** 

 

 ์ž…๋ ฅ์กฐ๊ฑด 

- ์ฒซ์งธ ์ค„์— ๋ชจํ—˜๊ฐ€์˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ( 1 ≤ N ≤ 100,000 )

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

 

 ์ถœ๋ ฅ์กฐ๊ฑด 

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

# ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ
n = int(input())  # ๋ชจํ—˜๊ฐ€์˜ ์ˆ˜
arr = list(map(int, input().split()))  # ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ์˜ ๊ณตํฌ๋„
arr.sort()
count= 0  # ํ˜„์žฌ ๊ทธ๋ฃน์— ํฌํ•จ๋œ ๋ชจํ—˜๊ฐ€ ์ˆ˜
result = 0 # ๊ทธ๋ฃน ์ˆ˜

for i in arr:
    count += 1
    if count >= i:
        result += 1
        count = 0

print(result) # ์ด ๊ทธ๋ฃน ์ˆ˜ ์ถœ๋ ฅ

2. ๊ณฑํ•˜๊ธฐ ํ˜น์€ ๋”ํ•˜๊ธฐ

 ๋ฌธ์ œ

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

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

์˜ˆ๋ฅผ ๋“ค์–ด 02984๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง€๋ฉด, ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” ( ( ( ( 0 + 2 ) x 9 ) x 8 ) x 4 ) = 576 ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” ํ•ญ์ƒ 20์–ต ์ดํ•˜์˜ ์ •์ˆ˜๊ฐ€ ๋˜๋„๋ก ์ž…๋ ฅ์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

 

 ์ž…๋ ฅ์กฐ๊ฑด

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

 

 ์ถœ๋ ฅ์กฐ๊ฑด

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

# ๊ณฑํ•˜๊ธฐ ํ˜น์€ ๋”ํ•˜๊ธฐ
s = input()
arr = []

for i in s:
    arr.append(int(i))

arr.sort()
result = arr[0]

for i in range(1, len(arr)):
    if arr[i] <= 1 or result <= 1:
        result += arr[i]
    else:
        result *= arr[i]

print(result)

3. ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ

 ๋ฌธ์ œ

๋‹ค์†œ์ด๋Š” 0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด S๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์†œ์ด๋Š” ์ด ๋ฌธ์ž์—ด S์— ์žˆ๋Š” ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์ „๋ถ€ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์†œ์ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰๋™์€ S์—์„œ ์—ฐ์†๋œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ˆซ์ž๋ฅผ ์žก๊ณ  ๋ชจ๋‘ ๋’ค์ง‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋’ค์ง‘๋Š” ๊ฒƒ์€ 1์„ 0์œผ๋กœ, 0์„ 1๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด S = 0001100 ์ผ ๋•Œ 

1) ์ „์ฒด๋ฅผ ๋’ค์ง‘์œผ๋ฉด 1110011

2) 4๋ฒˆ์งธ ๋ฌธ์ž๋ถ€ํ„ฐ 5๋ฒˆ์งธ ๋ฌธ์ž๊นŒ์ง€ ๋’ค์ง‘์œผ๋ฉด 1111111์ด ๋˜์–ด์„œ ๋‘ ๋ฒˆ๋งŒ์— ๋ชจ๋‘ ๊ฐ™์€ ์ˆซ์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋Œ€, ๋‹ค์†œ์ด๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ํ–‰๋™์˜ ์ตœ์†ŒํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.

 

 ์ž…๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์— 0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. S์˜ ๊ธธ์ด๋Š” 100๋งŒ๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค.

 

 ์ถœ๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์— ๋‹ค์†œ์ด๊ฐ€ ํ•ด์•ผํ•˜๋Š” ํ–‰๋™์˜ ์ตœ์†ŒํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

# ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ
# ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด์„œ ๊ฐ€์ •ํ•ด๋ณด๊ธฐ

data = input()
count0 = 0 # ์ „๋ถ€ 0์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ
count1 = 0 # ์ „๋ถ€ 1๋กœ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ

if data[0] == '1': # 1์ด๋ฉด 0์œผ๋กœ ๋ฐ”๊ฟ”์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    count0 += 1
else:
    count1 += 1

for i in range(len(data)-1):
    if data[i] != data[i+1]:
        if data[i+1] == '1':
            count0 += 1
        else:
            count1 += 1

print(min(count0, count1))

4. ๋งŒ๋“ค  ์ˆ˜ ์—†๋Š” ๊ธˆ์•ก

 ๋ฌธ์ œ

๋™๋„ค ํŽธ์˜์  ์ฃผ์ธ์ธ ๋™๋นˆ์ด๋Š” N๊ฐœ์˜ ๋™์ „์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ N๊ฐœ์˜ ๋™์ „์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์–‘์˜ ์ •์ˆ˜ ๊ธˆ์•ก ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

์˜ˆ๋ฅผ ๋“ค์–ด, N = 5์ด๊ณ , ๊ฐ ๋™์ „์ด ๊ฐ๊ฐ 3์›, 2์›, 1์›, 1์›, 9์›์งœ๋ฆฌ (ํ™”ํ๋‹จ์œ„) ๋™์ „์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค. ์ด ๋•Œ ๋™๋นˆ์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์–‘์˜ ์ •์ˆ˜ ๊ธˆ์•ก ์ค‘ ์ตœ์†Ÿ๊ฐ’์€ 8์›์ž…๋‹ˆ๋‹ค.

 

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ, N = 3์ด๊ณ , ๊ฐ ๋™์ „์ด ๊ฐ๊ฐ 3์›, 5์›, 7์›์งœ๋ฆฌ (ํ™”ํ๋‹จ์œ„) ๋™์ „์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค. ์ด๋•Œ ๋™๋นˆ์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์–‘์˜ ์ •์ˆ˜ ๊ธˆ์•ก ์ค‘ ์ตœ์†Ÿ๊ฐ’์€ 1์›์ž…๋‹ˆ๋‹ค.

 

 ์ž…๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์—๋Š” ๋™์ „์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์–‘์˜ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. 

- ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ ๋™์ „์˜ ํ™”ํ ๋‹จ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์ž์—ฐ์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. 

 

 ์ถœ๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง„ ๋™์ „๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์–‘์˜ ์ •์ˆ˜ ๊ธˆ์•ก ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

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

target = 1
for x in data:
    if target < x:
        break
    target += x

print(target)

5. ๋ณผ๋ง๊ณต ๊ณ ๋ฅด๊ธฐ

 ๋ฌธ์ œ

A, B ๋‘ ์‚ฌ๋žŒ์ด ๋ณผ๋ง์„ ์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์‚ฌ๋žŒ์€ ์„œ๋กœ ๋ฌด๊ฒŒ๊ฐ€ ๋‹ค๋ฅธ ๋ณผ๋ง๊ณต์„ ๊ณ ๋ฅด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ง๊ณต์€ ์ด N๊ฐœ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ฐ ๋ณผ๋ง๊ณต๋งˆ๋‹ค ๋ฌด๊ฒŒ๊ฐ€ ์ ํ˜€์žˆ๊ณ , ๊ณต์˜ ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฐ™์€ ๋ฌด๊ฒŒ์˜ ๊ณต์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์„œ๋กœ ๋‹ค๋ฅธ ๊ณต์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ง๊ณต์˜ ๋ฌด๊ฒŒ๋Š” 1๋ถ€ํ„ฐ M๊นŒ์ง€์˜ ์ž์—ฐ์ˆ˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด N์ด 5์ด๊ณ  M์ด 3์ด๋ฉฐ ๊ฐ๊ฐ์˜ ๋ฌด๊ฒŒ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ 1, 3, 2, 3, 2์ผ ๋•Œ ๊ฐ ๊ณต์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ 1๋ถ€ํ„ฐ 5๋ฒˆ๊นŒ์ง€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ๋‘์‚ฌ๋žŒ์ด ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ณผ๋ง๊ณต์˜ ๋ฒˆํ˜ธ ์กฐํ•ฉ์„ ๊ตฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‘ ์‚ฌ๋žŒ์ด ๊ณต์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 8๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. N๊ฐœ์˜ ๊ณต์˜ ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ๊ฐ ์ฃผ์–ด์งˆ ๋•Œ, ๋‘ ์‚ฌ๋žŒ์ด ๋ณผ๋ง๊ณต์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

 ์ž…๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์— ๋ณผ๋ง๊ณต์˜ ๊ฐœ์ˆ˜ N, ๊ณต์˜ ์ตœ๋Œ€ ๋ฌด๊ฒŒ M์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ๊ฐ๊ฐ ์ž์—ฐ์ˆ˜ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

- ๋‘˜์งธ ์ค„์— ๊ฐ ๋ณผ๋ง๊ณต์˜ ๋ฌด๊ฒŒ K๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ˆœ์„œ๋Œ€๋กœ ์ž์—ฐ์ˆ˜ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

 

 ์ถœ๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์— ๋‘ ์‚ฌ๋žŒ์ด ๋ณผ๋ง๊ณต์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

import itertools

n, m = map(int, input().split())

arr = list(map(int, input().split()))
a = 0
b = 0

for i in itertools.combinations(arr, 2):
    if list(i)[0] == list(i)[1]:
        b += 1
    a += 1

print(a-b)

์‹ค์ œ ์ฝ”ํ…Œ์—์„œ ์กฐํ•ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ์—  ์˜ˆ์‹œ ๋‹ต์•ˆ๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. 

# ๋ณผ๋ง๊ณต ๊ณ ๋ฅด๊ธฐ ๋‹ต์•ˆ
n, m = map(int, input().split())
data = list(map(int, input().split()))

# 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ๋ฌด๊ฒŒ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ
array = [0] * 11

for x in data:
    # ๊ฐ ๋ฌด๊ฒŒ์— ํ•ด๋‹นํ•˜๋Š” ๋ณผ๋ง๊ณต์˜ ๊ฐœ์ˆ˜ ์นด์šดํŠธ
    array[x] += 1

result = 0
# 1๋ถ€ํ„ฐ m๊นŒ์ง€์˜ ๊ฐ ๋ฌด๊ฒŒ์— ๋Œ€ํ•˜์—ฌ ์ฒ˜๋ฆฌ
for i in range(1, m+1):
    n -= array[i] # ๋ฌด๊ฒŒ๊ฐ€ i์ธ ๋ณผ๋ง๊ณต์˜ ๊ฐœ์ˆ˜ (A๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ˆ˜) ์ œ์™ธ
    result += array[i] * n # B๊ฐ€ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๊ณฑํ•˜๊ธฐ

print(result)

6. ๋ฌด์ง€์˜ ๋จน๋ฐฉ ๋ผ์ด๋ธŒ

 ๋ฌธ์ œ

ํ‰์†Œ ์‹์š•์ด ์™•์„ฑํ•œ ๋ฌด์ง€๋Š” ์ž์‹ ์˜ ์žฌ๋Šฅ์„ ๋ฝ๋‚ด๊ณ  ์‹ถ์–ด ์กŒ๊ณ  ๊ณ ๋ฏผ ๋์— ์นด์นด์˜ค TV ๋ผ์ด๋ธŒ๋กœ ๋ฐฉ์†ก์„ ํ•˜๊ธฐ๋กœ ๋งˆ์Œ๋จน์—ˆ๋‹ค.

๊ทธ๋ƒฅ ๋จน๋ฐฉ์„ ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฐฉ์†ก๊ณผ ์ฐจ๋ณ„์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋…ํŠนํ•œ ๋ฐฉ์‹์„ ์ƒ๊ฐํ•ด๋ƒˆ๋‹ค.

๋ฌด์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์Œ์‹์„ ์„ญ์ทจํ•œ๋‹ค.

 

  • ๋ฌด์ง€๋Š” 1๋ฒˆ ์Œ์‹๋ถ€ํ„ฐ ๋จน๊ธฐ ์‹œ์ž‘ํ•˜๋ฉฐ, ํšŒ์ „ํŒ์€ ๋ฒˆํ˜ธ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์Œ์‹์„ ๋ฌด์ง€ ์•ž์œผ๋กœ ๊ฐ€์ ธ๋‹ค ๋†“๋Š”๋‹ค.
  • ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ์˜ ์Œ์‹์„ ์„ญ์ทจํ•œ ํ›„์—๋Š” ํšŒ์ „ํŒ์— ์˜ํ•ด ๋‹ค์‹œ 1๋ฒˆ ์Œ์‹์ด ๋ฌด์ง€ ์•ž์œผ๋กœ ์˜จ๋‹ค.
  • ๋ฌด์ง€๋Š” ์Œ์‹ ํ•˜๋‚˜๋ฅผ 1์ดˆ ๋™์•ˆ ์„ญ์ทจํ•œ ํ›„ ๋‚จ์€ ์Œ์‹์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ๋‹ค์Œ ์Œ์‹์„ ์„ญ์ทจํ•œ๋‹ค.
  • ๋‹ค์Œ ์Œ์‹์ด๋ž€, ์•„์ง ๋‚จ์€ ์Œ์‹ ์ค‘ ๋‹ค์Œ์œผ๋กœ ์„ญ์ทจํ•ด์•ผ ํ•  ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฒˆํ˜ธ์˜ ์Œ์‹์„ ๋งํ•œ๋‹ค.
  • ํšŒ์ „ํŒ์ด ๋‹ค์Œ ์Œ์‹์„ ๋ฌด์ง€ ์•ž์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

๋ฌด์ง€๊ฐ€ ๋จน๋ฐฉ์„ ์‹œ์ž‘ํ•œ ์ง€ K ์ดˆ ํ›„์— ๋„คํŠธ์›Œํฌ ์žฅ์• ๋กœ ์ธํ•ด ๋ฐฉ์†ก์ด ์ž ์‹œ ์ค‘๋‹จ๋˜์—ˆ๋‹ค.

๋ฌด์ง€๋Š” ๋„คํŠธ์›Œํฌ ์ •์ƒํ™” ํ›„ ๋‹ค์‹œ ๋ฐฉ์†ก์„ ์ด์–ด๊ฐˆ ๋•Œ, ๋ช‡ ๋ฒˆ ์Œ์‹๋ถ€ํ„ฐ ์„ญ์ทจํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ๊ณ ์ž ํ•œ๋‹ค.

๊ฐ ์Œ์‹์„ ๋ชจ๋‘ ๋จน๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐฐ์—ด food_times, ๋„คํŠธ์›Œํฌ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ๊ฐ„ K ์ดˆ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ๋ช‡ ๋ฒˆ ์Œ์‹๋ถ€ํ„ฐ ๋‹ค์‹œ ์„ญ์ทจํ•˜๋ฉด ๋˜๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜๋ผ.

 

์ œํ•œ์‚ฌํ•ญ

 

  • food_times ๋Š” ๊ฐ ์Œ์‹์„ ๋ชจ๋‘ ๋จน๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์Œ์‹์˜ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด์ด๋‹ค.
  • k ๋Š” ๋ฐฉ์†ก์ด ์ค‘๋‹จ๋œ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋งŒ์•ฝ ๋” ์„ญ์ทจํ•ด์•ผ ํ•  ์Œ์‹์ด ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ ์ œํ•œ ์‚ฌํ•ญ

 

  • food_times ์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 2,000 ์ดํ•˜์ด๋‹ค.
  • food_times ์˜ ์›์†Œ๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.
  • k๋Š” 1 ์ด์ƒ 2,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ œํ•œ ์‚ฌํ•ญ

 

  • food_times ์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 200,000 ์ดํ•˜์ด๋‹ค.
  • food_times ์˜ ์›์†Œ๋Š” 1 ์ด์ƒ 100,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.
  • k๋Š” 1 ์ด์ƒ 2 x 10^13 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

food_times [ 3, 1, 2 ]

k 5

result 1

 

  • 0~1์ดˆ ๋™์•ˆ์— 1๋ฒˆ ์Œ์‹์„ ์„ญ์ทจํ•œ๋‹ค. ๋‚จ์€ ์‹œ๊ฐ„์€ [2,1,2] ์ด๋‹ค.
  • 1~2์ดˆ ๋™์•ˆ 2๋ฒˆ ์Œ์‹์„ ์„ญ์ทจํ•œ๋‹ค. ๋‚จ์€ ์‹œ๊ฐ„์€ [2,0,2] ์ด๋‹ค.
  • 2~3์ดˆ ๋™์•ˆ 3๋ฒˆ ์Œ์‹์„ ์„ญ์ทจํ•œ๋‹ค. ๋‚จ์€ ์‹œ๊ฐ„์€ [2,0,1] ์ด๋‹ค.
  • 3~4์ดˆ ๋™์•ˆ 1๋ฒˆ ์Œ์‹์„ ์„ญ์ทจํ•œ๋‹ค. ๋‚จ์€ ์‹œ๊ฐ„์€ [1,0,1] ์ด๋‹ค.
  • 4~5์ดˆ ๋™์•ˆ (2๋ฒˆ ์Œ์‹์€ ๋‹ค ๋จน์—ˆ์œผ๋ฏ€๋กœ) 3๋ฒˆ ์Œ์‹์„ ์„ญ์ทจํ•œ๋‹ค. ๋‚จ์€ ์‹œ๊ฐ„์€ [1,0,0] ์ด๋‹ค.
  • 5์ดˆ์—์„œ ๋„คํŠธ์›Œํฌ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. 1๋ฒˆ ์Œ์‹์„ ์„ญ์ทจํ•ด์•ผ ํ•  ๋•Œ ์ค‘๋‹จ๋˜์—ˆ์œผ๋ฏ€๋กœ, ์žฅ์•  ๋ณต๊ตฌ ํ›„์— 1๋ฒˆ ์Œ์‹๋ถ€ํ„ฐ ๋‹ค์‹œ ๋จน๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๋œ๋‹ค.
import heapq

def solution(food_times, k):
    # ์Œ์‹์„ ๋‹ค ๋จน์€ ๊ฒฝ์šฐ ๋” ๋จน์„ ๊ฒƒ์ด ์—†์„ ๋•Œ
    if sum(food_times) <= k:
        return -1
    
    q = []
    for i in range(len(food_times)):
        # (์Œ์‹์‹œ๊ฐ„, ์Œ์‹ ๋ฒˆํ˜ธ) ํ˜•ํƒœ๋กœ ์šฐ์„ ์ˆœ์œ„ ํ์— ์‚ฝ์ž…
        heapq.heappush(q, (food_times[i], i+1))
    sum_value = 0 # ๋จน๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„ 
    previous = 0 # ์ง์ „์— ๋‹ค ๋จน์€ ์Œ์‹ ์‹œ๊ฐ„
    length = len(food_times) # ๋‚จ์€ ์Œ์‹ ๊ฐœ์ˆ˜
    
    while sum_value + ((q[0][0] - previous)*length) <= k:
        now = heapq.heappop(q)[0]
        sum_value += (now-previous) * length 
        length -= 1
        previous = now # ์ด์ „ ์Œ์‹ ์‹œ๊ฐ„ ์žฌ์„ค์ • 
    
    result = sorted(q, key = lambda x : x[1]) # ์Œ์‹ ๋ฒˆํ˜ธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ 
        
    return result[(k-sum_value)%length][1]
Comments