C - 山崩し

C - 山崩し

O(N*(2N-1)) 全探索の問題です。 実装問題。

5
....#....
...##X...
..#####..
.#X#####.
#########

配列の下から判定すると上手くいきますね。

import math
import heapq
import itertools
from functools import reduce
 
# main
def main():
    N = int(input())
    field = []

    for _ in range(0, N):
        S = str(input())
        field.append(S)

    for i in range(N-1, 0, -1):
        for j in range(0, 2*N-1):
            if field[i][j] == 'X':
                if j-1>=0 and field[i-1][j-1] == '#':
                    field[i-1] = field[i-1][:j-1] + 'X' + field[i-1][j:]

                if field[i-1][j] == '#':
                    field[i-1] = field[i-1][:j] + 'X' + field[i-1][j+1:]

                if j+1<2*N-1 and field[i-1][j+1] == '#':
                    field[i-1] = field[i-1][:j+1] + 'X' + field[i-1][j+2:]
                    
    for i in range(0, N):
        print(field[i])

# エントリポイント
if __name__ == '__main__':
    main()