diff --git a/SH_Noh/season3/baekjoon/10/02-1/11559_PUYOPUYO.py b/SH_Noh/season3/baekjoon/10/02-1/11559_PUYOPUYO.py new file mode 100644 index 0000000..6374853 --- /dev/null +++ b/SH_Noh/season3/baekjoon/10/02-1/11559_PUYOPUYO.py @@ -0,0 +1,94 @@ +from collections import deque +from sys import stdin +input = stdin.readline + +# 4개 이상의 뿌요가 모이면 터진다! +# 여러 그룹이 있으면 동시에 터지고 이후 상황에서 터지면 콤보가 쌓인다! +def PuyoPop(i, j): + global trigger + dx = [1, -1, 0, 0] + dy = [0, 0, 1, -1] + + count = 1 + puyo = [(i, j)] + q = deque([(i, j)]) + visited[i][j] = True + while q: + x, y = q.popleft() + for d in range(4): + nx = x + dx[d] + ny = y + dy[d] + if 0 <= nx < 12 and 0 <= ny < 6 and visited[nx][ny] == False: + # 상하좌우의 같은 색 뿌요 찾기 + if state[x][y] == state[nx][ny]: + visited[nx][ny] = True + q.append((nx, ny)) + count += 1 + puyo.append((nx, ny)) + + if count >= 4: + # 뿌요가 한 번이라도 터지면 콤보! + trigger = True + # 뿌요를 터뜨리는 함수 돌리기 + for px, py in puyo: + state[px][py] = "." + + +# 중력에 의해 떨어지는 뿌요! +def PuyoDrop(state): + for j in range(6): + q = deque([]) + for i in range(11, -1, -1): + # 한 줄에 남아있는 뿌요들만 모으기 + if state[i][j] != '.': + q.append(state[i][j]) + # 바닥부터 차례로 채워주고 남는 공간은 .으로 채우기 + for i in range(11, -1, -1): + if q: + state[i][j] = q.popleft() + else: + state[i][j] = "." + + +state = [list(input().strip()) for _ in range(12)] +trigger = True + +if __name__ == "__main__": + combo = 0 + while trigger == True: + trigger = False + visited = [[False] * 6 for _ in range(12)] + for i in range(11, -1, -1): + for j in range(6): + if visited[i][j] == False and state[i][j] != ".": + # 현상황에서 터뜨리는 함수 돌리기 + PuyoPop(i, j) + # print("") + # for i in range(12): + # print("".join(state[i])) + # print("=================") + + # 한 번이라도 터졌으면 콤보 올리고 빈 칸 채우기 + if trigger == True: + combo += 1 + PuyoDrop(state) + + # for i in range(12): + # print("".join(state[i])) + # print("=================") + + print(combo) + +# 문제가 된 예제 +# ...... +# ...... +# ...... +# ...... +# ...... +# ...... +# .G.... +# RR.... +# RY.... +# RYG... +# RRY... +# RYYGG. \ No newline at end of file diff --git "a/SH_Noh/season3/baekjoon/10/02-1/pro_\353\252\250\354\235\214\354\202\254\354\240\204.py" "b/SH_Noh/season3/baekjoon/10/02-1/pro_\353\252\250\354\235\214\354\202\254\354\240\204.py" new file mode 100644 index 0000000..8e0fd5d --- /dev/null +++ "b/SH_Noh/season3/baekjoon/10/02-1/pro_\353\252\250\354\235\214\354\202\254\354\240\204.py" @@ -0,0 +1,29 @@ +# 사전에 A E I O U 만 사용하여 길이 5 이하의 모든 단어가 수록되어 있음 +# 사전 특성상 알파벳 순으로 정렬되어 있음 + +# 백트래킹 +def backtracking(word, tmp_word): + global num, answer + # print(tmp_word, num) + if tmp_word == word: + return num + if len(tmp_word) == 5: + return + + for w in word_list: + num += 1 + tmp_word.append(w) + answer = backtracking(word, tmp_word) + if answer: + return answer + tmp_word.pop() + +word_list = ["A", "E", "I", "O", "U"] +num = 0 +answer = '' + +def solution(word): + tmp_word = [] + backtracking(list(word), tmp_word) + + return answer \ No newline at end of file diff --git "a/SH_Noh/season3/baekjoon/10/03-2/9935_\353\254\270\354\236\220\354\227\264\355\217\255\353\260\234.py" "b/SH_Noh/season3/baekjoon/10/03-2/9935_\353\254\270\354\236\220\354\227\264\355\217\255\353\260\234.py" new file mode 100644 index 0000000..cff93ec --- /dev/null +++ "b/SH_Noh/season3/baekjoon/10/03-2/9935_\353\254\270\354\236\220\354\227\264\355\217\255\353\260\234.py" @@ -0,0 +1,20 @@ +from sys import stdin +input = stdin.readline + +if __name__ == "__main__": + string = list(input().rstrip()) + bomb_str = list(input().rstrip()) + # 임시 스택에 넣어 비교하기 + tmp = [] + for i in range(len(string)): + tmp.append(string[i]) + if tmp[-1] == bomb_str[-1] and len(tmp) >= len(bomb_str): + if tmp[-len(bomb_str):] == bomb_str: + # for i in range(len(bomb_str)): + # tmp.pop() + del tmp[-len(bomb_str):] + + if tmp: + print("".join(tmp)) + else: + print("FRULA")