For Programmer
SWEA 1211 파이썬 문제풀이(Laddar2) 본문
728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14BgD6AEECFAYh
이 문제도 1210 문제와 유사하다. 반복문을 돌면서 거리를 세어주고 계속해서 최소거리인지 검사해주고 그 거리가 최소 거리라면 그에 해당하는 출발 열번호를 저장해놓고 마지막에 출력하면 된다.
for _ in range(1, 10 + 1):
order = int(input())
data = []
for _ in range(100):
data.append(list(map(int, input().split())))
min_result = 10e+10 # 최소 거리를 저장할 변수(무의미한 큰값으로 저장)
result = -1 # 최소거리의 시작 열을 저장할 변수(무의미한 값으로 저장)
for x in range(100): # 0~99 까지 돈다.
if data[0][x] != 1: # 만약 출발지 x가 1이 아니라면 continue
continue
count = 0 # 거리를 셀 변수
i = 0 # 행 변수 i
j = x # 열 변수 j는 시작열인 x로 초기화
left_to_right = True # 현재 이동이 왼쪽에서 오른쪽으로 진행되고 있는지를 체크하는 변수
right_to_left = True # 현재 이동이 오른쪽에서 왼쪽으로 진행되고 있는지 체크하는 변수
while True:
if i == len(data) - 1: # 만약 마지막 행까지 왔다면
if min_result > count: # 만약 저장된 최솟 거리보다 저 거리가 짧다면
min_result = count # 그 거리를 최소거리로 설정한 후
result = x # 시작 열 번호도 저장해 놓는다.
break
# 만약 열이 마지막열이 아니고 오른쪽 열이 1이고 현재 왼쪽에서 오는 중이라면
if j != len(data) - 1 and data[i][j + 1] == 1 and left_to_right == True:
right_to_left = False # 다시 오른쪽에서 왼쪽으로 가면 안되기 때문에 right변수는 True로 해주고
j += 1 # 열을 한칸 이동
# 만약 열이 0이 아니고 왼쪽 열이 1이고 현재 오른쪽에서 오는 중이라면
elif j != 0 and data[i][j - 1] == 1 and right_to_left == True:
left_to_right = False # 다시 왼쪽에서 오른쪽으로 가면 안되기 때문에 True로 바꿔준 후
j -= 1 # 열을 한칸 왼쪽으로 땡긴다.
# 만약 양옆이 0이고 아래가 1이라면
elif data[i + 1][j] == 1:
right_to_left = True # 다시 양옆으로 이동할 수 있으므로 False로 바꿔준다.
left_to_right = True # 다시 양옆으로 이동할 수 있으므로 False로 바꿔준다.
i += 1 # 열을 한칸 증가.
count += 1 # 거리를 1 증가시켜준다.
print(f'#{order} {result}')
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
SWEA 1258 파이썬 문제풀이(행렬찾기) (0) | 2022.02.07 |
---|---|
SWEA 1220 파이썬 문제풀이(Magnetic) (0) | 2022.02.06 |
SWEA 1210 파이썬 문제풀이(Laddar1) (0) | 2022.02.06 |
SWEA 1209 파이썬 문제풀이(Sum) (0) | 2022.02.06 |
SWEA 1959 파이썬 문제풀이(두 개의 숫자열) (0) | 2022.02.06 |
Comments