일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준 1613 역사
- 백준 2352 반도체 설계 파이썬
- 프로그래머스 등굣길
- SWEA
- 백준 1238 파티 파이썬
- 백준 1167 트리의 지름 파이썬
- 프로그래머스 가장 긴 팰린드롬
- 프로그래머스 베스트앨범
- 가장 긴 팰린드롬 파이썬
- 다리 만들기 파이썬
- 백준 2146 다리 만들기
- 베스트앨범 파이썬
- 게임 개발 파이썬
- SQL SERVER MIGRATION
- 다중 컬럼 NOT IN
- 프로그래머스 순위 파이썬
- 등굣길 파이썬
- 백준 1516 게임 개발
- 백준 1034 램프 파이썬
- 순위 파이썬
- 램프 파이썬
- 트리의 지름 파이썬
- 가장 긴 바이토닉 부분 수열 파이썬
- 백준 11054.가장 긴 바이토닉 부분 수열
- 프로그래머스 순위
- SQL SERVER 장비교체
- 프로그래머스 여행경로
- 반도체 설계 파이썬
- 역사 파이썬
- 백준 1043 거짓말 파이썬
Archives
- Today
- Total
공부, 기록
1767. 프로세서 연결하기 파이썬(Python) 본문
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이 : dfs를 이용하여 풀이하였다. 50개중 49개만 통과하여 알아보니 상하좌우 모두 갈 수 없는경우 넘어가주는 조건을 추가하니 통과되었다.
import copy
def solution(N,MAPS,core):
stack=list()
visit=list()
stack.append((0,0,0,copy.deepcopy(MAPS)))
minlen=9999
maxcore=0
answer=list()
while stack:
idx, corecount, linelen, copymap = stack.pop()
answer.append((corecount,linelen))
if idx==len(core):
continue
nowcore = core[idx]
checks=0
for i in range(4):
newcopymap=copy.deepcopy(copymap)
#오른쪽
if i == 0:
if 1 not in newcopymap[nowcore[0]][nowcore[1]+1:]:
for j in range(nowcore[1]+1,N):
newcopymap[nowcore[0]][j]=1
stack.append((idx+1,corecount+1,linelen+N-nowcore[1]-1,newcopymap))
checks+=1
#왼쪽
elif i == 1:
if 1 not in newcopymap[nowcore[0]][:nowcore[1]]:
for j in range(0,nowcore[1]):
newcopymap[nowcore[0]][j]=1
stack.append((idx+1,corecount+1,linelen+nowcore[1],newcopymap))
checks+=1
#위
elif i == 2:
check=True
for j in range(nowcore[0]):
if newcopymap[j][nowcore[1]] == 1:
check=False
break
if check==True:
for z in range(0,nowcore[0]):
newcopymap[z][nowcore[1]]=1
stack.append((idx+1,corecount+1,linelen+nowcore[0],newcopymap))
checks+=1
#아래
elif i == 3:
check=True
for j in range(nowcore[0]+1,N):
if newcopymap[j][nowcore[1]] == 1:
check=False
break
if check==True:
for z in range(nowcore[0]+1,N):
newcopymap[z][nowcore[1]]=1
stack.append((idx+1,corecount+1,linelen+N-nowcore[0]-1,newcopymap))
checks+=1
if checks == 0:
stack.append((idx+1,corecount,linelen,newcopymap))
answer.sort(key = lambda x:(x[0],-x[1]))
return answer[-1][1]
def main():
T=int(input())
for test_case in range(1,T+1):
MAPS=list()
N=int(input())
core = list()
for i in range(N):
line=list(map(int,input().split()))
if 1 in line:
for j in range(len(line)):
if line[j] == 1:
if i != 0 and i != N and j != 0 and j != N:
core.append((i,j))
MAPS.append(line)
print("#{} {}".format(test_case, solution(N,MAPS,core)))
main()
'코딩' 카테고리의 다른 글
[프로그래머스] 멀리 뛰기 파이썬(PYTHON) (0) | 2020.11.14 |
---|---|
[프로그래머스] LEVEL 3. 거스름돈 파이썬 (0) | 2020.11.14 |
3752. 가능한 시험 점수 D4 파이썬 (0) | 2020.08.23 |
2819. 격자판의 숫자 이어 붙이기 D4 파이썬 (0) | 2020.08.23 |
1219. [S/W 문제해결 기본] 4일차 - 길찾기 D4 파이썬 (0) | 2020.08.23 |