๐Ÿš—

ํƒ‘์ฝ”๋” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณต - 1. ํ‚ค์œ„ ์ฃผ์Šค

๋ฌธ์ œ

ํƒ€๋กœ๋Š” ๋ง›์žˆ๋Š” ํ‚ค์œ„ ์ฃผ์Šค๋ฅผ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํƒ€๋กœ๋Š” 0๋ถ€ํ„ฐ N-1์ด๋ผ ์ด๋ฆ„์„ ๋ถ™์ธ N๊ฐœ์˜ ๋ณ‘์— ํ‚ค์œ„ ์ฃผ์Šค๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด๋•Œ i๋ฒˆ์งธ์˜ ๋ณ‘์˜ ์šฉ๋Ÿ‰์€ capacities[i] ๋ฆฌํ„ฐ์ด๋ฉฐ ํƒ€๋กœ๊ฐ€ i๋ฒˆ์งธ ๋ณ‘์— ๋„ฃ์€ ํ‚ค์œ„ ์ฃผ์Šค์˜ ์–‘์„ bottles[i] ๋ฆฌํ„ฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€๋กœ๋Š” ๋ณ‘์— ํ‚ค์œ„ ์ฃผ์Šค๋ฅผ ์žฌ๋ถ„๋ฐฐํ•˜๋ ค๊ณ  ํ•˜๋ฉฐ, 0๋ถ€ํ„ฐ M-1๊นŒ์ง€ MํšŒ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
i๋ฒˆ์จฐ์˜ ์กฐ์ž‘์€ ํƒ€๋กœ๊ฐ€ ๋ณ‘ fromId[i]๋ถ€ํ„ฐ ๋ณ‘ toId[i]์— ํ‚ค์œ„ ์ฃผ์Šค๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๋ณ‘ fromId[i]๊ฐ€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ๋ณ‘ toId[i]๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ๋Š” ์ˆœ๊ฐ„, ํƒ€๋กœ๋Š” ๋” ์ด์ƒ ํ‚ค์œ„ ์ฃผ์Šค๋ฅผ ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

N๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด int[]๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ์„ธ์š”.
๋ฐฐ์—ด์˜ i๋ฒˆ์งธ ์š”์†Œ๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์Ÿ๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ณ  i๋ฒˆ์งธ ๋ณ‘์— ๋‚จ์•„ ์žˆ๋Š” ํ‚ค์œ„ ์ฃผ์Šค์˜ ์–‘์ž…๋‹ˆ๋‹ค.

์ •์˜

class KiwiJuiceEasy:
	def thePouring(self, capacities, bottles, fromId, told):

์ž…๋ ฅ

capacities : 2~50๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด, ๊ฐ ์š”์†Œ๋Š” 1 <= N <= 1000000 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. bottles : capacities์™€ ๊ฐ™์€ ์ˆ˜์˜ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด. bottles[i]๋Š” capacities[i]์— ๋“ค์–ด์žˆ๋Š” ์ฃผ์Šค์˜ ์–‘์„ ์˜๋ฏธ fromId : 1~50๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด toId : fromId์™€ ๊ฐ™์€ ์ˆ˜์˜ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด

์ถœ๋ ฅ

๋ณ‘๋“ค์— ๋‚จ์•„์žˆ๋Š” ์ฃผ์Šค์˜ ์–‘์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด

IO Example

# Case# 0
capacities = [20, 20]
bottles = [5, 8]
from_id = [0]
to_id = [1]

result : [0, 13]

# Case# 1
capacities = [10, 10]
bottles = [5, 8]
from_id = [0]
to_id = [1]

result : [3, 10]

# Case# 2
capacities = [30, 20, 10]
bottles = [10, 5, 5]
from_id = [0, 1, 2]
to_id = [1, 2, 0]

result : [10, 10, 0]

# Case# 3
capacities = [14, 35, 86, 58, 25, 62]
bottles = [6, 34, 27, 38, 9, 60]
from_id = [1, 2, 4, 5, 3, 3, 1, 0]
to_id = [0, 1, 2, 4, 2, 5, 3, 1]

result : [0, 14, 65, 35, 25, 35]

# Case# 4
capacities = [700000, 800000, 900000, 1000000]
bottles = [478478, 478478, 478478, 478478]
from_id = [2, 3, 2, 0, 1]
to_id = [0, 1, 1, 3, 2]

result : [0, 156956, 900000, 856956]

๊ตฌํ˜„

1์ฐจ ์ฝ”๋“œ

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

class KiwiJuiceEasy:
    def the_pouring(self, capacities, bottles, from_id, to_id):
        ret = []

        for i in range(len(from_id)):
            from_i = from_id[i]
            to_i = to_id[i]

            # ์˜ฎ๊ธธ ๋ณ‘์ด ๋น„์–ด์žˆ์œผ๋ฉด pass
            if bottles[from_i] == 0:
                continue

            # ๋‹ด๊ธธ ๋ณ‘์ด ๊ฝ‰์ฐจ์žˆ์œผ๋ฉด pass
            if bottles[to_i] == capacities[to_i]:
                continue

            # ์˜ฎ๊ธธ ๋ณ‘์˜ ์šฉ๋Ÿ‰๋ณด๋‹ค from + to์˜ ๋‚ด์šฉ๋ฌผ์ด ์ ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด
            # bottles[to_i]์— ์ฃผ์Šค๋ฅผ ์˜ฎ๊น€.
            if bottles[from_i] + bottles[to_i] <= capacities[to_i]:
                bottles[to_i] += bottles[from_i]
                bottles[from_i] = 0

            # ์˜ฎ๊ธธ ๋ณ‘์˜ ์šฉ๋Ÿ‰๋ณด๋‹ค from + to์˜ ๋‚ด์šฉ๋ฌผ์ด ๋งŽ์œผ๋ฉด
            # bottles[to_i]์— ์ฃผ์Šค๋ฅผ ์˜ฎ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€๋ฅผ from์— ๋‚จ๊น€.
            elif bottles[from_i] + bottles[to_i] > capacities[to_i]:
                tmp = bottles[to_i] + bottles[from_i] - capacities[to_i]
                bottles[to_i] = capacities[to_i]
                bottles[from_i] = tmp

        # ๋ชจ๋“  bottles๋ฅผ ret์— ๋‹ด์Œ
        for bottle in bottles:
            ret.append(bottle)

        return ret

2์ฐจ ์ฝ”๋“œ

2์ฐจ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์กฐ๊ฑด๋ฌธ์ด ํ•„์š”์ด์ƒ์œผ๋กœ ๋งŽ์œผ๋ฉด ์ฝ”๋“œ ์–‘์ด ๋Š˜์–ด๋‚˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ธฐ ํž˜๋“ค๊ฒŒ ๋œ๋‹ค.
์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ if๋ฌธ์„ minํ•จ์ˆ˜๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์˜ฎ๊ธธ ์ฃผ์Šค์˜ ์–‘๊ณผ ๊ธฐ์กด ์ฃผ์Šค ๋ณ‘์˜ ๋‚จ์€ ์šฉ๋Ÿ‰์„ ๋น„๊ตํ•˜์—ฌ ์ž‘์€ ๊ฒƒ์ด ์ด๋™๋Ÿ‰์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
minํ•จ์ˆ˜๋กœ ๋Œ€์ฒดํ•˜๋ฉด์„œ ์กฐ๊ฑด๋ฌธ์ด ๊ฝค๋‚˜ ์‚ฌ๋ผ์ ธ์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ํ›จ์”ฌ ์ข‹์•„์กŒ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ret ๋ฐฐ์—ด์„ ์ œ๊ฑฐํ•˜์—ฌ ๋ฐ”๋กœ bottles ๋ฐฐ์—ด์„ returnํ•˜๊ฒŒ๋” ํ•˜์˜€๋‹ค.

class KiwiJuiceEasy:
    def the_pouring(self, capacities, bottles, from_id, to_id):
        for i in range(len(from_id)):
            f = from_id[i]
            t = to_id[i]

            # ์˜ฎ๊ธธ ์ฃผ์Šค์˜ ์–‘๊ณผ ๊ธฐ์กด ์ฃผ์Šค ๋ณ‘์˜ ๋‚จ์€ ์šฉ๋Ÿ‰์„ ๋น„๊ตํ•ด
            # ์ž‘์€ ๊ฒƒ์ด ์ด๋™๋Ÿ‰์ด ๋œ๋‹ค.
            vol = min(bottles[f], capacities[t] - bottles[t])

            # ์˜ฎ๊ธธ ์ฃผ์Šค ๋ณ‘์— ์ด๋™๋Ÿ‰์„ ๋บ€๋‹ค.
            bottles[f] -= vol
            # ๊ธฐ์กด ์ฃผ์Šค ๋ณ‘์˜ ๋‚จ์€ ์šฉ๋Ÿ‰์— ์ด๋™๋Ÿ‰์„ ๋”ํ•œ๋‹ค.
            bottles[t] += vol

        return bottles

3์ฐจ ์ฝ”๋“œ

3์ฐจ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์˜ ๋กœ์ง์ด ๋ฌด๋ ค 3์ค„์ด๋‹ค!!
์‹œ์ž‘๋ถ€์— f์™€ t์˜ ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ์ˆ์ฝ”๋”ฉ์ด ๋˜์—ˆ์ง€๋งŒ ๊ฐ€๋…์„ฑ๋ฉด์—์„  ์กฐ๊ธˆ ๋ถˆํŽธํ•ด์กŒ๋‹ค๊ณ  ๋Š๊ปด์ง„๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๋Š” ๊ฝค๋‚˜ ์‹ฌํ”Œํ•˜๋‹ค.
์ด๋™๋Ÿ‰์„ ๋ฌด์‹œํ•˜๊ณ  ์˜ฎ๊ธธ ์ฃผ์Šค์™€ ๊ธฐ์กด ์ฃผ์Šค ์–‘์˜ ์ดํ•ฉ์ด ์ผ์ •ํ•˜๊ณ ,
์˜ฎ๊ธธ ์ฃผ์Šค๋Š” ์ฃผ์Šค ์ด๋Ÿ‰๊ณผ ๊ธฐ์กด ์ฃผ์Šค ๋ณ‘์˜ ์šฉ๋Ÿ‰ ์ค‘์— ์ž‘์€ ๊ฐ’์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

  • ๊ธฐ์กด ์ฃผ์Šค(bottles[to_id[i]]) : min(์˜ฎ๊ธธ ์ฃผ์Šค + ๊ธฐ์กด ์ฃผ์Šค, ๊ธฐ์กด ์ฃผ์Šค ๋ณ‘์˜ ์šฉ๋Ÿ‰)
  • ์˜ฎ๊ธธ ์ฃผ์Šค(bottles[from_id[i]]) : (์˜ฎ๊ธธ ์ฃผ์Šค + ๊ธฐ์กด ์ฃผ์Šค) - ๊ธฐ์กด ์ฃผ์Šค
class KiwiJuiceEasy:
    def the_pouring(self, capacities, bottles, from_id, to_id):
        for i in range(len(from_id)):
            sum = bottles[from_id[i]] + bottles[to_id[i]]
            bottles[to_id[i]] = min(sum, capacities[to_id[i]])
            bottles[from_id[i]] = sum - bottles[to_id[i]]

        return bottles

๋งˆ๋ฌด๋ฆฌ

  • ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์†์œผ๋กœ ๊ณ„์‚ฐํ•ด๋ณด๊ธฐ. ๋จธ๋ฆฌ๋กœ๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ‘œ๋ฉด์ ์ธ ๋ถ€๋ถ„๊นŒ์ง€ ๋ฐ–์— ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•จ.
    ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•ด๋ณด๊ธฐ. ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐ์ด ๋“ค์–ด๋„ ๋ˆ„๋ฝ๋œ ๋ถ€๋ถ„์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ.

  • ์ฝ”๋”ฉ์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋ฉด ๋‹ค์‹œ ํ•œ ๋ฒˆ ์†์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๊ธฐ. ๋งŽ์€ ๊ฒƒ์„ ์ƒ๊ฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋„ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๊ณณ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Œ.
    ์ด๋Ÿด๋• ์ฝ”๋“œ ์ž‘์„ฑ์„ ์ค‘๋‹จํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ.

  • ์กฐ๊ฑด๋ฌธ์„ ๋˜๋„๋ก ์กฐ๊ธˆ ์‚ฌ์šฉํ•˜๊ธฐ. ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ Example์—์„œ ๋ชจ๋“  Testcase๋ฅผ ์ฃผ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด๋ฌธ์„ ์ ๊ฒŒ ์‚ฌ์šฉํ•ด ๋ฒ„๊ทธ๋ฅผ ์ค„์—ฌ์•ผ ํ•œ๋‹ค.

yoon.homme
yoon.homme

๊ธฐ์ˆ ๊ณผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ํž˜์ด ์„ธ์ƒ์„ ๋ฐ”๊พผ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

ํŽธ๋ฆฌํ•œ ์„ธ์ƒ์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜๊ณ  ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.