본문 바로가기
카테고리 없음

백준17247🐨택시거리

by redcubes 2024. 8. 10.

import sys
coop = []
head,*data = sys.stdin.read().splitlines()
row, col = map(int,head.split())
for i in range(row):
    line = data[i]
    if '1' in line:
        j = line.split().index('1')
        coop+=[i,j]
        if len(coop) == 4:
            print(abs(coop[0] - coop[2]) + abs(coop[1] - coop[3]))
            sys.exit()

32ms코드.

두개의 1의 좌표를 구해서 식에 넣기만 하면 되는 문제.

1을 찾을 때 연산을 줄이려고 문자열 상태로 받아서 찾은 뒤 인덱스 찾을 때 라인을 스플릿했다.

굳이 안 해도 되는 건 꼭 필요할 때 까지 미루는 방법.

시도 과정에서 splitlines()를 쓰게 되었고, 그 전까지 1차원으로 불러오면서 생기던 단점이 커버되었다.

os대신 sys를 쓰면서 exit를 조합하면 os보다 빠를 수 있다.

아래는 52ms짜리 코드인데 스플릿 위치만 다르다.

import sys
coop = []
head,*data = sys.stdin.read().splitlines()
row, col = map(int,head.split())
for i in range(row):
    line = data[i].split()
    if '1' in line:
        j = line.index('1')
        coop+=[i,j]
        if len(coop) == 4:
            print(abs(coop[0] - coop[2]) + abs(coop[1] - coop[3]))
            sys.exit()