[python_파이썬_Pass]백준_2564번_경비원_풀이
2024. 8. 12. 22:37ㆍ코드리뷰
728x90
반응형
공부하는허딩크 : https://www.youtube.com/live/942ryg6Zch8?feature=shared
처음에 문제를 너무 쉽게 봤다.
금방 해결할 수 있을 것 같았는데 1시간 조금 넘게 걸렸다.
따로 알고리즘이나 공식이 있어 보이지는 않았고, 내 위치가 어딘지에 따라서 각 상점간의 거리를 하나씩 구해서 answer의 변수에 넣어주면 답이 나오겠다고 생각했다.
<첫번째 시도 : 맞았습니다.>
아래의 코드로 일단 작성은 했으나 오류를 찾기가 어려웠다.
import sys
input = sys.stdin.readline
#1. 입력 및 초기화
X, Y = map(int, input().split())
M = int(input())
market = []
for i in range(M):
x, y = map(int, input().split())
market.append([x, y])
mx, my = map(int, input().split())
answer = 0
"""본인위치 기준 같은 쪽이면 1, 2면 Y / 3, 4면 X가 무조건 필요"""
for i in range(M):
temp_x, temp_y = market[i]
if temp_x == mx:
answer += abs(temp_y- my)
#같은 방향일때
elif (temp_x == 1 and mx == 2) or (temp_x == 2 and mx == 1):
"""반대방향 확인 필요"""
answer += min((Y + my + temp_y), ((X - my) + Y + (X - temp_y)))
elif (temp_x == 3 and mx == 4) or (temp_x == 4 and mx == 3):
answer += min((X + my + temp_y),((Y - my) + X + (Y - temp_y)))
#다른 방향일때
elif (temp_x == 1 and mx == 3) or (temp_x == 3 and mx == 1):
answer += my + temp_y
elif (temp_x == 1 and mx == 4) or (temp_x == 4 and mx == 1):
#answer += (X - my) + temp_y
answer += my + (X - temp_y)
elif (temp_x == 2 and mx == 3) or (temp_x == 3 and mx == 2):
answer += my + (Y - temp_y)
elif (temp_x == 2 and mx == 4) or (temp_x == 4 and mx == 2):
answer += (X - my) + (Y - temp_y)
print(answer)
<다른 스터디원 코드 : 명확하고 직관적이며, 오류 발생 가능성이 낮다.>
나와 같은 생각을 했으나 나와는 다른 코드로 작성했다.
방향은 같으나 and와 or를 남발했던 나와는 다르게 이중 if로 보다 더 직관적으로 작성했다.
import sys
input = sys.stdin.readline
w, h = map(int, input().split())
n = int(input())
stores = []
for _ in range(n):
direction, location = map(int, input().split())
stores.append((direction, location))
md, ml = map(int, input().split())
answer = 0
for d, l in stores:
if md == 1:
if d == 1:
answer += abs(ml - l)
elif d == 2:
answer += min(ml + l + h, 2*w - ml - l + h)
elif d == 3:
answer += ml + l
elif d == 4:
answer += w - ml + l
elif md == 2:
if d == 1:
answer += min(ml + l + h, 2*w - ml - l + h)
elif d == 2:
answer += abs(ml - l)
elif d == 3:
answer += ml + h - l
elif d == 4:
answer += w - ml + h - l
elif md == 3:
if d == 1:
answer += l + ml
elif d == 2:
answer += l + h - ml
elif d == 3:
answer += abs(ml - l)
elif d == 4:
answer += min(w + 2*h - l - ml, w + ml + l)
elif md == 4:
if d == 1:
answer += ml + w - l
elif d == 2:
answer += h - ml + w - l
elif d == 3:
answer += min(w + 2*h - l - ml, w + ml + l)
elif d == 4:
answer += abs(ml - l)
print(answer)
<다른 사람 코드 참조>
이거 좀 복습해서 이해해야겠네...
import sys
def cng_one(dir, dis, i):
if dir == 1:
one_dis[i] = dis
elif dir == 2:
one_dis[i] = w + h + w - dis
elif dir == 3:
one_dis[i] = w + h + w + h - dis
else:
one_dis[i] = w + dis
w, h = map(int, sys.stdin.readline().split())
n = int(input())
one_dis = [0 for _ in range(n + 1)]
for i in range(n + 1):
dir, dis = map(int, sys.stdin.readline().split())
cng_one(dir, dis, i)
s = 0
for j in range(n):
cir = abs(one_dis[j] - one_dis[-1])
re_cir = 2 * (w + h) - cir
if cir <= re_cir:
s += cir
else:
s += re_cir
print(s)
728x90
반응형
'코드리뷰' 카테고리의 다른 글
[python_파이썬_Pass]백준_10250번_ACM 호텔_풀이 (0) | 2024.08.19 |
---|---|
[python_파이썬_Pass]백준_2503번_숫자 야구_풀이 (0) | 2024.08.15 |
★[python_파이썬_Fail]백준_2573번_빙산_풀이 (0) | 2024.08.06 |
[python_파이썬_포기]프로그래머스_LV1_2016년_풀이 (0) | 2024.06.23 |
[python_파이썬_Summer/Winter Coding(~2018)]프로그래머스_LV1_소수 만들기_풀이_★소수알고리즘, 조합 (0) | 2024.06.20 |