[Python] BOJ 1089번. 엘리베이터

1089번. 엘리베이터

문제 링크

풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 1089번. 엘리베이터


init = ''
init += '###...#.###.###.#.#.###.###.###.###.###'
init += '#.#...#...#...#.#.#.#...#.....#.#.#.#.#'
init += '#.#...#.###.###.###.###.###...#.###.###'
init += '#.#...#.#.....#...#...#.#.#...#.#.#...#'
init += '###...#.###.###...#.###.###...#.###.###'
# print(len(init))

numbers = [[[] for i in range(5)] for i in range(10)]
# 0~9 숫자 모양 만들어주기
for i in range(5):  # 5줄
    for j in range(0, 39, 4):  # 3개씩
        numbers[j//4][i] = list(init[i*39+j:i*39+j+3])

n = int(input())

# n 개 숫자 담아줄 리스트
inNum = [[[] for i in range(5)] for i in range(n)]

for i in range(5):
    s = list(input().rstrip())  # 한줄 받고
    for j in range(0, n*3+(n-1), 4):  # 3칸씩 끊기. 범위 조심
        inNum[j//4][i] = list(s[j:j+3])

# 비교해주기 (numbers, inNum)
temp = [[] for i in range(n)]
for i in range(n):  # 하나씩 꺼내서
    for j in range(10):  # 10개 다 비교
        flag = True
        for p in range(5):  # 5줄
            if not flag:
                break
            for q in range(3):  # 3개
                if inNum[i][p][q] == '#' and numbers[j][p][q] == '.':
                    # 이건 매칭 할 수 없다.
                    flag = False
                    break
        if flag:  # 이건 매칭 할 수 있음
            temp[i].append(j)


# 모든 조합 만들기
c = [0 for i in range(n)]
for i in range(n):
    for j in range(len(temp[i])):
        c[i] += temp[i][j]

flag=True
for i in range(n):
    if len(temp[i])==0:
        flag=False
        break
if flag:
    ans = 0
    for i in range(n):
        ans *= 10
        ans += c[i]/len(temp[i])
    print(ans)
else:
    print(-1)

비고