60058, 18428 (백준)

김태성·2022년 1월 27일
0

프로그래머스 60058 괄호 변환

  • 개인적으로 프로그래머스는 문제가 재밌지만 입력 예시가 적어서 어려운것 같다*
    [재풀이 필요]
import sys
input = sys.stdin.readline  
left = right = 0
result = ""
check = 0

# 여는 괄호로 시작될 경우
def startWithleft(p):
    global left, right, result
    if len(p)==0:
        return     
    for i,c in enumerate(p):
        if '(' == c:
            left += 1
        elif ')' == c:
            right += 1
        if right == left:
            result += p[:i+1]
            if p[i+1] != 'e':
                solution(p[i+1:])
            return   
        
# 닫는 괄호로 시작될 경우        
def startWithright(p):
    global left, right, result
    tmp_p = ""
    for i,c in enumerate(p):
            if '(' == c:
                left += 1
                tmp_p += ')'
            elif ')' == c:
                right += 1
                tmp_p += '('
            if right == left:
                result += tmp_p
                if p[i+1] != 'e':
                    solution(p[i+1:])
                return

def solution(p):
    global left, right, result
    if len(p)==0:
        return ""
    if p[0] == '(':
        startWithleft(p+"e")
    elif p[0] == ')':
        startWithright(p+"e")
    return result

18428 감시피하기

[재풀이 필요]

import sys
input = sys.stdin.readline
N = int(input())
board = []

#상하좌우
move = [(-1,0),(1,0),(0,-1),(0,1)]
Teacher = []
result = False

for _ in range(N):
    board.append(list(input().split()))
print(board)

for i in range(N):
    for j in range(N):
        if board[i][j] == 'T':
            Teacher.append((i,j))

def compare(i,j):
    if board[i][j] == 'S':
        return -1
    elif board[i][j] == 'X':
        return 0
    elif board[i][j] == 'T' or board[i][j] == 'O': #확인필요
        return 1
    

#선생님의 상하좌우에 학생이 있는지 확인(걸린학생 있을 시 False리턴)
def check(i,j):
    #상하좌우
    for dy,dx in move:
        y=dy+i
        x=dx+j
        while 0<=y<N and 0<=x<N:
            if compare(y,x) == -1:
                return False
            elif compare(y,x) == 0:
                y += i
                x += j 
                continue
            else:
                break

    #걸린 학생없을 시 True리턴
    return True

def dfs(cnt):
    global result
    if cnt > 3:
        return
    if cnt == 3:
        for i,j in Teacher:
            if check(i,j):
                result = True
                return
            
    for i in range(N):
        for j in range(N):
            if board[i][j]=='X':
                board[i][j]='O'
                dfs(cnt+1)
                if result:
                    return
                board[i][j]='X'
                
        
        
dfs(0)
if result:
    print("YES")
else:
    print("NO")

profile
@flip_404

0개의 댓글

관련 채용 정보