12 Sat

TIL

์˜คํ† ๋งˆํƒ€์™€ ์ปดํŒŒ์ผ๋Ÿฌ

River Crossing : ์ค‘๊ฐ„ ์ฝ”๋“œ

River Crossing ์ค‘๊ฐ„์ฝ”๋“œ ๋ฆฌ๋ทฐ

์žฌ๊ท€๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์•„์ง ์‹คํŒจํ•˜๋Š” ์ฝ”๋“œ.

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

left = ['W', 'S', 'C']
right = []


def pos(_left, _right):
    if 'S' in _left:
        if 'W' in _left or 'C' in _left:
            return False
    elif 'S' in _right:
        if 'W' in _right or 'C' in _right:
            return False
    return True

def cross(_left, _right, dir, record, element = None):
    if len(_right) == 3: return record
    if dir:    # src -> dst
        for ele in _left:
            if ele == element:
                continue
            l, r, rec = _left, _right, record
            l.remove(ele)
            if pos(l, r):
                r.append(ele)
                if pos(l, r):
                    rec.append(f"{ele} moves from src to dst")
                    record.append(cross(l, r, 0, rec, ele))
                else:
                    print("Failed")
                    print(record)
                    print()
            else:
                print("Failed")
                print(record)
                print()
    else:      # dst -> src
        for ele in _right:
            if ele == element:
                continue
            l, r, rec = _left, _right, record
            r.remove(ele)
            if pos(l, r):
                l.append(ele)
                if pos(l, r):
                    rec.append(f"{ele} moves from dst to src")
                    record.append(cross(l, r, 1, rec, ele))
                else:
                    print("Failed")
                    print(record)
                    print()
            else:
                print("Failed")
                print(record)
                print()
        record.append(cross(_left, _right, 0, record))

    return record

success = cross(left, right, 1, [])
print(success)

Last updated

Was this helpful?