https://www.acmicpc.net/problem/17829

문제 해결 방법
1. 맵은 행과 열이 항상 2의 배수일 수 밖에 없다는 것을 인지한다.
2. 따라서 0행0열 0행 2열 0행 4열... 2행 0열 2행 2열.... 이렇게 맵의 크기만큼 조회한다.
2-1. 출발지 기준 이때 오른쪽으로 한칸, 아래로 한칸, 아래 오른쪽으로 한칸 을 리스트에 넣는다.
2-2. 리스트에서 두번재로 큰 수만 모아서 또다른 리스트를 만든다.
2번을 맵의 원소가 1개 남을때 까지 반복하다보면 결과 값이 나온다.
코드 구현
정답 코드
import sys
n = int(input())
block=[]
for i in range(n):
tmp = list(map(int, sys.stdin.readline().strip().split()))
block.append(tmp)
while 1:
if len(block[0])==1:
print(block[0][0])
break
makeBlock = [item[:] for item in block]
block = []
for i in range(0, len(makeBlock),2):
tmp=[]
for j in range(0, len(makeBlock[0]),2):
realT=[makeBlock[i][j], makeBlock[i][j+1], makeBlock[i+1][j], makeBlock[i+1][j+1]]
realT.sort(reverse=True)
tmp.append(realT[1])
block.append(tmp)
시간/공간 복잡도
해당 문제는 구현문제이기 때문에 시간/공간 복잡도를 따지지 않는다.
최적화 및 개선
따로 하지 않음
어려웠던 점
쉬운 구문을 까먹어서 검색해서 찾아봤다 아예 그 구문은 외워야겠다.
리스트 복사하는 구문과 sort함수 사용법.
'코딩테스트 > 문제 풀이 - Python' 카테고리의 다른 글
[백준1926] 그림 (0) | 2024.08.26 |
---|---|
[백준9252] LCS 2 (0) | 2024.08.14 |
[백준2504] 괄호의 값 (0) | 2024.08.12 |
[백준10799] 쇠막대기 (0) | 2024.08.09 |
[백준2110] 공유기 설치 (0) | 2024.08.06 |