Wiki » 이력 » 버전 10
백흠경, 2020/03/13 19:39
1 | 1 | 백흠경 | h1. Wiki |
---|---|---|---|
2 | 1 | 백흠경 | |
3 | 3 | 백흠경 | # 아래 그림에서 주어진 조건으로 grouping하여 두번째와 같은 결과를 만드는 문제입니다. |
4 | 5 | 백흠경 | ## [1,2,3,5], [4,11,7,8,9], [6,10] 각각 같은 조건을 가지고 있음 |
5 | 2 | 백흠경 | {{drawio(SMAP-Page-1.xml)}} |
6 | 3 | 백흠경 | ## 조건 : Package, Fluid, Material이 같고 연결된 아이템(물리적으로 연결되어 있으나 노즐이나 OPC에서는 끊김) |
7 | 4 | 백흠경 | ## 기능 : 아이템에서 연결된 아이템들은 찾을 수 있음(1번에 연결된 아이템은 2,3임) |
8 | 2 | 백흠경 | {{drawio(SMAP-Page-2.xml)}} |
9 | 6 | 백흠경 | |
10 | 7 | 백흠경 | ----- |
11 | 7 | 백흠경 | |
12 | 7 | 백흠경 | h2. 알고리즘 |
13 | 7 | 백흠경 | |
14 | 6 | 백흠경 | # [그림 1]을 다음과 같이 간략화 시킬수 있습니다. |
15 | 6 | 백흠경 | {{drawio(SMAP-Page-3.xml)}} |
16 | 7 | 백흠경 | # all = [1,2,3,4,5,6,7,8,9,10,11,12] |
17 | 7 | 백흠경 | # 조건에 맞게 grouping합니다. |
18 | 7 | 백흠경 | <pre> |
19 | 7 | 백흠경 | packages = [] |
20 | 7 | 백흠경 | while all: |
21 | 7 | 백흠경 | item = all.pop() |
22 | 7 | 백흠경 | package = group(item) |
23 | 7 | 백흠경 | packages.append(package) |
24 | 7 | 백흠경 | package.consume(all) |
25 | 7 | 백흠경 | </pre> |
26 | 7 | 백흠경 | # group 클래스 |
27 | 7 | 백흠경 | <pre> |
28 | 7 | 백흠경 | class group: |
29 | 7 | 백흠경 | def __init__(self, item): |
30 | 7 | 백흠경 | self.members = [item] |
31 | 7 | 백흠경 | |
32 | 7 | 백흠경 | def consume(self, all): |
33 | 7 | 백흠경 | """group을 구성한다""" |
34 | 7 | 백흠경 | stack = self.members |
35 | 7 | 백흠경 | while stack: |
36 | 7 | 백흠경 | item = stack.pop() |
37 | 7 | 백흠경 | connected_items = self.get_connected_items(item, all) |
38 | 7 | 백흠경 | for connected in connected_items: |
39 | 7 | 백흠경 | if connected is Equipment or connected is OPC: |
40 | 7 | 백흠경 | all.remove(connected) |
41 | 7 | 백흠경 | continue |
42 | 7 | 백흠경 | |
43 | 7 | 백흠경 | if self.members[0].package == connected.package and self.members[0].fluid == connected.fluid and self.members[0].material == connected.material: |
44 | 7 | 백흠경 | stack.append(connected) |
45 | 7 | 백흠경 | self.members.append(connected) |
46 | 7 | 백흠경 | all.remove(connected) |
47 | 7 | 백흠경 | |
48 | 7 | 백흠경 | def get_connected_items(self, item, all) -> list: |
49 | 7 | 백흠경 | """item에 연결된 아이템들 중 all에 있는 것을 리턴한다""" |
50 | 7 | 백흠경 | return [connected for connected in item.connecteds if connected in all] |
51 | 7 | 백흠경 | </pre> |
52 | 8 | 백흠경 | ** member 하나와 connected 만 비교하면 됩니다. |
53 | 8 | 백흠경 | 어떤 구슬을 같은 색의 주머니에 넣기 위해 색깔을 비교할때 주머니에 있는 구슬 하나만 꺼내 비교하면 됩니다.(주머니에 있는 구슬들은 모두 같은 색깔이므로) |
54 | 9 | 백흠경 | |
55 | 9 | 백흠경 | ---- |
56 | 9 | 백흠경 | |
57 | 9 | 백흠경 | h2. 검증 |
58 | 10 | 백흠경 | |
59 | 10 | 백흠경 | {{drawio(SMAP-Page-4.xml)}} |