코딩테스트
[파이썬(python)] 기둥과 보 설치
고후
2022. 2. 28. 20:27
몇몇 테스트 케이스에서 통과했는데 10개의 테스트 케이스에서 런타임 에러로 실패했다.
왜인지 계속 들여다봤는데 내 코드가 답지와도 유사해서 더 모르겠더라.
계속 보니까 조건 하나를 빠트려서 실패했다.
기둥일 경우 보의 한쪽 끝부분 위에 있는 경우는 2가지가 있다.
나는 1가지 경우만 체크했었음 ..
그래서 그 조건만 추가하니까 통과!
def istrue(answer):
#조건 모두 만족하는지 확인
for i in answer:
if i[2] == 0:
#기둥
if i[1] == 0:
#바닥 위에 있는 경우
continue
row = [i[0] - 1, i[1], 1]
row_2 = [i[0], i[1], 1]
col = [i[0], i[1] - 1, 0]
if row in answer or row_2 in answer:
#보 위에 있는 경우
continue
if col in answer:
#기둥 위에 있는 경우
continue
return False
else:
#보
row1 = [i[0], i[1] - 1, 0]
row2 = [i[0] + 1, i[1] - 1, 0]
#기둥 위에 있는 경우
if row1 in answer:
continue
if row2 in answer:
continue
col1 = [i[0] - 1, i[1], 1]
col2 = [i[0] + 1, i[1], 1]
#양쪽 끝에 보가 있는 경우
if col1 in answer and col2 in answer:
continue
return False
return True
def solution(n, build_frame):
answer = []
#frame = [[] * (n+1)] * (n+1)
#print(frame)
for build in build_frame:
if build[3] == 0:
#삭제
#일단 삭제해봄
answer.remove(build[:3])
#조건 만족하는지 확인
if istrue(answer) == False:
answer.append(build[:3])
#만족하지 않으면 다시 지음
else:
#설치
answer.append(build[:3])
#일단 설치
if not istrue(answer):
answer.pop()
#조건 맞는지 확인
#만족하지 않으면 삭제
result = sorted(answer)
return result
하지만 코드를 좀더 깔끔하게 작성해봤다.
def istrue(answer):
#조건 모두 만족하는지 확인
for x, y, stuff in answer:
if stuff == 0:
#기둥
if y == 0:
#바닥 위에 있는 경우
continue
if [x-1, y, 1] in answer or [x, y, 1] in answer:
#보 위에 있는 경우
continue
if [x, y-1, 0] in answer:
#기둥 위에 있는 경우
continue
return False
else:
#보
#기둥 위에 있는 경우
if [x, y-1, 0] in answer:
continue
if [x+1, y-1, 0] in answer:
continue
#양쪽 끝에 보가 있는 경우
if [x-1, y, 1] in answer and [x+1, y, 1] in answer:
continue
return False
return True
def solution(n, build_frame):
answer = []
#frame = [[] * (n+1)] * (n+1)
#print(frame)
for build in build_frame:
x, y, stuff, operate = build
frame = build[:3]
if operate == 0:
#삭제
#일단 삭제
answer.remove(frame)
#조건 만족하는지 확인
if istrue(answer) == False:
answer.append(frame)
#만족하지 않으면 다시 지음
else:
#설치
answer.append(frame)
#일단 설치
if not istrue(answer):
answer.pop()
#조건 맞는지 확인
#만족하지 않으면 삭제
result = sorted(answer)
return result