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()