Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 2251. ๋ฌผํ†ต

deo2kim 2020. 8. 25. 08:00
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

1. S1 | ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, BFS

2. ๋ฌผํ†ต์ด 3๊ฐœ์ง€๋งŒ ๋ฌผ์˜ ์ด๋Ÿ‰์ด ๊ณ ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— a,b ๋‘ ๋ฌผํ†ต๋งŒ ์ฒดํฌํ•˜๋ฉด ๋œ๋‹ค. c๋Š” ์ €์ ˆ๋กœ ์ •ํ•ด์ง.

3. visited ๋ฆฌ์ŠคํŠธ๋ฅผ 2์ค‘ ๋ฆฌ์ŠคํŠธ๋กœ ์ž‘์„ฑํ•œ๋‹ค.( ๋ณ€์ˆ˜๊ฐ€ 2๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ )

4. ์ฒ˜์Œ 0,0์„ ๋„ฃ๊ณ  BFS๋ฅผ ํ•œ๋‹ค.       

 (1) a ๋ฌผํ†ต์ด 0์ผ ๋•Œ c ๋ฌผํ†ต์˜ ์–‘์„ ๋‹ต๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์ค€๋‹ค. 

 (2) a -> b, a -> c, b -> a, b -> c, c -> a, c -> b 6๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•œ๋‹ค.

 (3) ์กฐ๊ฑด์— ๋งž๋‹ค๋ฉด ๋ฌผ์„ ๋‚˜๋ˆ„๊ณ  ๊ณ„์† ํƒ์ƒ‰ํ•œ๋‹ค.

5. ๋‹ต์„ ์ถœ๋ ฅ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ถœ๋ ฅํ•˜๋ฉด ๋.

 

๐Ÿ’จ ๋ณ€์ˆ˜๋ฅผ 2๊ฐœ๋งŒ ์ •ํ•ด์„œ visited๋ฅผ 2์ค‘๋ฆฌ์ŠคํŠธ๋กœ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฌผ์„ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

from collections import deque


def pour(x, y):
    if not visited[x][y]:
        visited[x][y] = 1
        q.append((x, y))


def bfs():
    q.append((0,0))  # ์ฒ˜์Œ ๋ฌผํ†ต a,b๋Š” 0,0
    visited[0][0] = 1
    while q:
        x, y = q.popleft()
        z = c - x - y  # z๋Š” a์™€b์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.
        if x == 0:  # ์กฐ๊ฑด์—์„œ a๋ฌผํ†ต์ด 0์ผ๋•Œ ์ด๋ฏ€๋กœ
            answer.append(z)

        # a์—์„œ b ๋ฌผ์„ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ
        if x > 0 and y < b:  # a์— ๋ฌผ์ด ์žˆ๊ณ  b์— ๋ฌผ์ด ๊ฐ€๋“์ฐจ์žˆ์ง€ ์•Š์„ ๋•Œ
            w = min(x, b - y)
            pour(x - w, y + w)
        # a์—์„œ c
        if x > 0 and z < c:
            w = min(x, c - z)
            pour(x - w, y)

        # b์—์„œ a
        if y > 0 and x < a:
            w = min(y, a - x)
            pour(x + w, y - w)
        # b์—์„œ c
        if y > 0 and z < c:
            w = min(y, c - z)
            pour(x, y - w)

        # c์—์„œ a
        if z > 0 and x < a:
            w = min(z, a - x)
            pour(x + w, y)
        # c์—์„œ b
        if z > 0 and y < b:
            w = min(z, b - y)
            pour(x, y + w)


if __name__ == "__main__":
    a, b, c = map(int, input().split())
    # visited: a ๋ฌผํ†ต๊ณผ b ๋ฌผํ†ต์˜ ์–‘์— ๋”ฐ๋ผ c ๋ฌผํ†ต์˜ ์–‘์ด ์ •ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—
    # a,b ๋‘ ํ†ต์„ ์‹คํ–‰ํ•œ ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” 2์ค‘๋ฆฌ์ŠคํŠธ
    visited = [[0] * (b + 1) for _ in range(a + 1)]
    # ๋‹ต์„ ๋„ฃ์„ ๋ฐฐ์—ด
    answer = []
    # BFS
    q = deque()
    bfs()
    # ๋‹ต ์ถœ๋ ฅ
    answer.sort()
    print(' '.join(list(map(str, answer))))

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/2251

 

2251๋ฒˆ: ๋ฌผํ†ต

๊ฐ๊ฐ ๋ถ€ํ”ผ๊ฐ€ A, B, C(1≤A, B, C≤200) ๋ฆฌํ„ฐ์ธ ์„ธ ๊ฐœ์˜ ๋ฌผํ†ต์ด ์žˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์•ž์˜ ๋‘ ๋ฌผํ†ต์€ ๋น„์–ด ์žˆ๊ณ , ์„ธ ๋ฒˆ์งธ ๋ฌผํ†ต์€ ๊ฐ€๋“(C ๋ฆฌํ„ฐ) ์ฐจ ์žˆ๋‹ค. ์ด์ œ ์–ด๋–ค ๋ฌผํ†ต์— ๋“ค์–ด์žˆ๋Š” ๋ฌผ์„ ๋‹ค๋ฅธ ๋ฌผํ†ต์œผ๋กœ ์Ÿ์•„ ๋ถ€

www.acmicpc.net




๋ฌธ์ œ

๊ฐ๊ฐ ๋ถ€ํ”ผ๊ฐ€ A, B, C(1≤A, B, C≤200) ๋ฆฌํ„ฐ์ธ ์„ธ ๊ฐœ์˜ ๋ฌผํ†ต์ด ์žˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์•ž์˜ ๋‘ ๋ฌผํ†ต์€ ๋น„์–ด ์žˆ๊ณ , ์„ธ ๋ฒˆ์งธ ๋ฌผํ†ต์€ ๊ฐ€๋“(C ๋ฆฌํ„ฐ) ์ฐจ ์žˆ๋‹ค. ์ด์ œ ์–ด๋–ค ๋ฌผํ†ต์— ๋“ค์–ด์žˆ๋Š” ๋ฌผ์„ ๋‹ค๋ฅธ ๋ฌผํ†ต์œผ๋กœ ์Ÿ์•„ ๋ถ€์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ์—๋Š” ํ•œ ๋ฌผํ†ต์ด ๋น„๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ํ•œ ๋ฌผํ†ต์ด ๊ฐ€๋“ ์ฐฐ ๋•Œ๊นŒ์ง€ ๋ฌผ์„ ๋ถ€์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์†์‹ค๋˜๋Š” ๋ฌผ์€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์ด์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๋‹ค๋ณด๋ฉด ์„ธ ๋ฒˆ์งธ ๋ฌผํ†ต(์šฉ๋Ÿ‰์ด C์ธ)์— ๋‹ด๊ฒจ์žˆ๋Š” ๋ฌผ์˜ ์–‘์ด ๋ณ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฌผํ†ต(์šฉ๋Ÿ‰์ด A์ธ)์ด ๋น„์–ด ์žˆ์„ ๋•Œ, ์„ธ ๋ฒˆ์งธ ๋ฌผํ†ต(์šฉ๋Ÿ‰์ด C์ธ)์— ๋‹ด๊ฒจ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ์˜ ์–‘์„ ๋ชจ๋‘ ๊ตฌํ•ด๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์„ธ ์ •์ˆ˜ A, B, C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ์šฉ๋Ÿ‰์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•