엄청 많은 시도가 있었는데, 처음에 복잡하게 for문과 while 문 여러 개를 써서 구현했더니 시간초과 / 메모리초과가 계속 떴고, 이후 완전히 다르게 생각해 맞추었다.
일단 여기서 중력이 위에서 아래로 작용하기 때문에 이를 조금 손쉽게 처리하기 위해 list로 바꾸어 sort하려고 했다. a와 .은 문자열에서 sort시 '.'가 먼저고 'a'가 나중이기 때문에 그를 이용하였다. 그렇게 #가 나오기 전까지 .과 a를 하나의 list에 넣어 sort해주고 #는 그냥 넣어주는 식으로 구성한다. 이후 그림에 보이는 것처럼 꺼내주기 위해서 2차원을 1차원으로 압축시켜준 후 순서에 맞게 차례대로 print하였다.
import sys
sys.setrecursionlimit(100000)
#중력 문제임!!
N,M=map(int, sys.stdin.readline().split())
arr=[]
for i in range(N):
arr.append(list(input()))
Box=[]
box=[]
for i in range(M):
for j in range(N):
if arr[j][i]=='#':
box.sort()
Box.append(box) #넣고
box=[] #새로 만들기
box.append(arr[j][i])
Box.append(box)
box=[]
elif j==N-1 :
box.append(arr[j][i])
box.sort()
Box.append(box) #넣고
box=[] #새로 만들기
else:box.append(arr[j][i])
Box=sum(Box,[])
for i in range(N):
for j in range(M):
print(Box[N*j+i],end='')
print()
'Koala - 5기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[BOJ/python] 11656번 접미사 배열 (0) | 2022.02.06 |
---|---|
[백준 / python] 5789번 한다 안한다 (1) | 2022.02.06 |
[백준/c++] 5218번 알파벳 거리 (2) | 2022.02.04 |
[백준/python] 3986. 좋은 단어 (0) | 2022.01.31 |
[백준/python] 15813번:너의 이름은 몇 점이니? (0) | 2022.01.30 |