๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ (level3, python)

๊ฐœ๋ฐœ์ž HOON 2022. 9. 9. 01:01

๋ฌธ์ œ ์„ค๋ช…

 

์ž์—ฐ์ˆ˜ n ๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ค‘๋ณต ์ง‘ํ•ฉ(multi set, ํŽธ์˜์ƒ ์ดํ›„์—๋Š” "์ง‘ํ•ฉ"์œผ๋กœ ํ†ต์นญ) ์ค‘์— ๋‹ค์Œ ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ง‘ํ•ฉ์„ ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

  1. ๊ฐ ์›์†Œ์˜ ํ•ฉ์ด S๊ฐ€ ๋˜๋Š” ์ˆ˜์˜ ์ง‘ํ•ฉ
  2. ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ๊ฐ ์›์†Œ์˜ ๊ณฑ ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” ์ง‘ํ•ฉ

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ž์—ฐ์ˆ˜ 2๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ ์ค‘ ํ•ฉ์ด 9๊ฐ€ ๋˜๋Š” ์ง‘ํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
{ 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 }


๊ทธ์ค‘ ๊ฐ ์›์†Œ์˜ ๊ณฑ์ด ์ตœ๋Œ€์ธ { 4, 5 }๊ฐ€ ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

 

์ง‘ํ•ฉ์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜ n๊ณผ ๋ชจ๋“  ์›์†Œ๋“ค์˜ ํ•ฉ s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

 

  • ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ 1์ฐจ์› ๋ฐฐ์—ด(list, vector) ๋กœ return ํ•ด์ฃผ์„ธ์š”.
  • ๋งŒ์•ฝ ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ํฌ๊ธฐ๊ฐ€ 1์ธ 1์ฐจ์› ๋ฐฐ์—ด(list, vector) ์— -1 ์„ ์ฑ„์›Œ์„œ return ํ•ด์ฃผ์„ธ์š”.
  • ์ž์—ฐ์ˆ˜์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์›์†Œ๋“ค์˜ ํ•ฉ s๋Š” 1 ์ด์ƒ, 100,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

 

 
์ž…์ถœ๋ ฅ ์˜ˆ

 

n s result
2 9 [4, 5]
2 1 [-1]
2 8 [4, 4]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

์ž…์ถœ๋ ฅ ์˜ˆ#1


๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ#2


์ž์—ฐ์ˆ˜ 2๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ ๋Š” ํ•ฉ์ด 1์ธ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ -1์ด ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ#3


์ž์—ฐ์ˆ˜ 2๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ ์ค‘ ์›์†Œ์˜ ํ•ฉ์ด 8์ธ ์ง‘ํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{ 1, 7 }, { 2, 6 }, { 3, 5 }, { 4, 4 }

๊ทธ์ค‘ ๊ฐ ์›์†Œ์˜ ๊ณฑ์ด ์ตœ๋Œ€์ธ { 4, 4 }๊ฐ€ ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

 


ํ’€์ด ์ฝ”๋“œ

def solution(n, s):
    if n > s:
        return [-1]
    
    mid = s//n
    answer = [mid for _ in range(n)]
    rest = s - (mid * n)
    right = n-1
    
    while rest != 0:
        answer[right] += 1
        right -= 1
        rest -= 1
    return answer

์ฝ”๋“œ ๊ตฌํ˜„ ์ž์ฒด๋Š” ๋‹จ์ˆœํ–ˆ์ง€๋งŒ, level3๋ผ ์ƒ๊ฐ์ด ์กฐ๊ธˆ ํ•„์š”ํ•œ ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋กœ ํ’€์ด๋ฅผ ํ–ˆ๋‹ค.

 

๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ๋ณด๊ณ , n์ด 10,000๊ฐœ, s๊ฐ€ 1์–ต์ธ ๊ฒƒ์„ ๋ณด๊ณ  ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋†’์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ ํŒ๋‹จํ–ˆ๋‹ค.

n์ด ๋‘ ๊ฐœ์ธ ๊ฒฝ์šฐ๋งŒ ๋ณด๋ฉด ํŽธํ˜‘ํ•œ ์ƒ๊ฐ์„ ํ•  ์ง€ ๋ชจ๋ฅด๋‹ˆ, ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ค€๋น„ํ•ด ๊ด€์ฐฐํ•ด๋ณด์•˜๋‹ค.

if) n=3, s=9์ธ ๊ฒฝ์šฐ

๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ง‘ํ•ฉ๊ณผ ์ง‘ํ•ฉ ์›์†Œ ์ „์ฒด์˜ ๊ณฑ์„ ํ™•์ธํ•ด๋ณด์ž.

๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ง‘ํ•ฉ : {1,2,6} / {1,3,5} / {1,4,4} / {2,2,5} / {2,3,4} / {3,3,3}

์ง‘ํ•ฉ ์›์†Œ ์ „์ฒด์˜ ๊ณฑ : {12} / {15} / {8} / {20} / {24} / {27}

์–ด๋Š์ •๋„ ์ง‘ํ•ฉ๊ณผ ๊ณฑ์„ ๋น„๊ตํ•ด๋ณด๋ฉด, n๊ฐœ์˜ ์›์†Œ์˜ ๊ฐ’ ๋ถ„ํฌ๊ฐ€ ๊ณ ๋ฅด๋ฉด ๊ณ ๋ฅผ ์ˆ˜๋ก ์ง‘ํ•ฉ ์›์†Œ ์ „์ฒด์˜ ๊ณฑ์ด ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค!

๋”ฐ๋ผ์„œ ์ด ์ ์„ ์ด์šฉํ•ด ๊ทธ๋ฆฌ๋””ํ•˜๊ฒŒ ํ’€์–ด๋ณด์ž.

 

๋ถ„ํฌ๊ฐ€ ๊ณ ๋ฅธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ–ˆ๋‹ค.

1) s//n์ด๋ผ๋Š” ๋™์ผํ•œ ๊ฐ’ n๊ฐœ๋ฅผ ๋ฐฐ์—ด์— ์‚ฝ์ž…ํ•œ๋‹ค.

2) ๋ฐฐ์—ด์˜ ์ „์ฒด ํ•ฉ์ด s๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ์ถ”๊ฐ€๋กœ ๋ฐฐ์—ด ์›์†Œํ•ด ๋” ํ•ด์ฃผ์–ด์•ผ ํ•  ๊ฐ’ rest๋ฅผ ๊ตฌํ•œ๋‹ค.

3) rest๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋‚˜๋ˆ„์–ด์•ผ ํ•˜๊ณ , ์ถ”ํ›„์— ์ •๋ ฌํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๋ฐฐ์—ด์˜ ๋’ค์—์„œ๋ถ€ํ„ฐ 1์”ฉ ๋”ํ•˜๊ณ  ์•ž์œผ๋กœ ์œ„์น˜๋ฅผ ์˜ฎ๊ธด๋‹ค.

4) s//n์˜ ์—ฐ์‚ฐ ํŠน์„ฑ์ƒ, 0๋ฒˆ ์ธ๋ฑ์Šค ๊ฐ’๊นŒ์ง€ 1์„ ๋”ํ•  ์ผ์ด ์—†์œผ๋ฏ€๋กœ, while ๋ฌธ ์กฐ๊ฑด์€ rest != 0 ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค.