Problem Solving/Programmers
[Programmers] 2020 KAKAO BLIND RECRUITMENT: 기둥과 보 설치(Python)
이진2
2021. 6. 9. 03:30
https://programmers.co.kr/learn/courses/30/lessons/60061?language=python3
코딩테스트 연습 - 기둥과 보 설치
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
정말 악랄한 문제 ~~
구현 문제를 오랜만에 풀어서 그런지 설계 부분에서 [보는 양쪽 끝단이 존재한다]라는 조건을 빼먹었고
그리고 기둥과 보가 같은 좌표에 존재할 수 있다는 것도 간과했당
질문게시판이 없엇다면......^^ 3일 걸렸을 듯
이번 주에 카카오식 구현 문제를 많이많이 풀어봐서 얼른 적응해야겠다 ~~~
pillar=[]
beam=[]
def pillarCheck(x, y):
if y==0: return True
elif (x>0 and beam[y][x-1]) or beam[y][x]: return True
elif pillar[y-1][x]: return True
return False
def beamCheck(x, y):
if pillar[y-1][x] or pillar[y-1][x+1]: return True
elif beam[y][x-1] and beam[y][x+1]: return True
return False
def deleteCheck():
for i in range(len(pillar)):
for j in range(len(pillar[i])):
if pillar[i][j]:
if pillarCheck(j,i)==False: return False
if beam[i][j]:
if beamCheck(j,i)==False: return False
return True
def solution(n, build_frame):
global pillar, beam
answer = []
n+=1
pillar=[[0 for _ in range(n)] for _ in range(n)]
beam=[[0 for _ in range(n)] for _ in range(n)]
for x,y,a,b in build_frame:
if b==0:
if a==0:
pillar[y][x]=0
if deleteCheck()==False:
pillar[y][x]=1
else:
beam[y][x]=0
if deleteCheck()==False:
beam[y][x]=1
else:
if a==0 and pillarCheck(x,y)==True: pillar[y][x]=1
elif a==1 and beamCheck(x,y)==True: beam[y][x]=1
for i in range(n):
for j in range(n):
if pillar[i][j]: answer.append([j,i,0])
if beam[i][j]: answer.append([j,i,1])
return sorted(answer)