2/프로그래머스

프로그래머스 연습 문제 - 기둥과 보 설치

하례은 2020. 10. 7. 18:35

programmers.co.kr/learn/courses/30/lessons/60061

 

코딩테스트 연습 - 기둥과 보 설치

5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[

programmers.co.kr

2020 KAKAO BLIND RECRUITMENT

 

def solution(n, build_frame):
    def init(n):
        res = []
        for y in range(n+1):
            st = []
            for x in range(n+1):
                st.append([x,y,0,0])
            res.append(st)
        return res

    def check(answer,x,y):
        ser = True
        if answer[y][x][2] == 1:
            if y == 0 or answer[y][x][3] == 1 or answer[y-1][x][2] == 1 or (x > 0 and answer[y][x-1][3] == 1) :
                ser = True
            else:
                return False
        elif answer[y][x][3] == 1:
            if (y > 0 and answer[y-1][x][2] == 1) or (y>0 and x < n and answer[y-1][x+1][2] == 1) or (x > 0 and x < n and answer[y][x - 1][3] == 1 and answer[y][x + 1][3] == 1):
                ser = True
            else:
                return False 
        return ser


    answer = init(n)
    for i in range(len(build_frame)):
        x,y = build_frame[i][0],build_frame[i][1]

        if build_frame[i][3] == 1: #설치 
            if build_frame[i][2] == 0: #기둥
                answer[y][x][2] = answer[y][x][2] + 1
                if check(answer,x,y) is False:
                    answer[y][x][2] = answer[y][x][2] - 1
                
            else: #보
                answer[y][x][3] = answer[y][x][3] + 1
                if check(answer,x,y) is False:
                    answer[y][x][3] = answer[y][x][3] - 1
                
        else: #철거
            if build_frame[i][2] == 0: #기둥
                if answer[y][x][2] > 0:
                    answer[y][x][2] = answer[y][x][2] -1
                    if (check(answer,x,y) and check(answer, x ,y + 1) and check(answer,x - 1,y + 1)) is False:
                        answer[y][x][2] = answer[y][x][2]+1
                
            else: #보
                if answer[y][x][3] > 0:
                    answer[y][x][3] = answer[y][x][3] -1
                    if (check(answer,x,y) and check(answer,x - 1,y) and check(answer,x + 1,y)) is False:
                        answer[y][x][3] = answer[y][x][3]+1
        
    
    
    
    sot = []
    for i in range(len(answer)):
        for j in range(len(answer)):
            if answer[j][i][2] > 0:
                sot.append([answer[j][i][0], answer[j][i][1], answer[j][i][2]-1])
            if answer[j][i][3] > 0:
                sot.append([answer[j][i][0], answer[j][i][1], answer[j][i][3]])
                
    return sot

 

채점 결과

정확성: 28.8

합계: 28.8 / 100.0

 

뭐가 틀렸는지 알수가없네... 후... 다시 풀이 후 수정..

 

 

 

~참고

www.youtube.com/watch?v=PePZZip0E2I

여기 풀이보고 참고해서 풀었다... 아직 멀었구만,.