일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 만화도
- English
- Writing
- 미드시청
- 괜찮음
- 화상영어
- Problem Solving
- 운동
- 매일
- Daily Challenge
- FIT XR
- 3줄정리
- 파비최
- 영어공부
- 리얼 클래스
- 30분
- realclass
- 잡생각
- 뭐든
- 스탭퍼
- 읽기
- 10분
- 영어원서읽기
- leetcode
- 프로젝트
- 사이드
- 개발자
- 쓰릴오브파이트
- 링피트
- 월간
Archives
- Today
- Total
파비의 매일매일 공부기록
[Week of Line Sweep] BOJ 7571 본문
어제에 이어 오늘도 Line Sweep 문제를 풀었다.
Line Sweep 문제는 거의 2D의 격자나 1D의 Line 형태로 된 문제인거 같은데
이번 문제는 2D 격자로 구성된 문제였다.
문제를 딱 본 순간 각 좌표들의 평균값에 해당하는 좌표를 구해서
각 좌표에서 빼준 값을 누적하면 될거 같아서 그렇게 풀었다.
그런데 WA(Wrong Answer)..
뭐가 문제지 하고 반례를 찾아봤더니
(1,1), (1,2), (1,6) 인 경우
평균 좌표는 (1,3) 이며
각 좌표에서 거리를 누적한 값은 6이 된다.
그러나 (1,2)를 기준으로 거리를 누적한 값은 5가 된다.
풀이도 같이 찾아봤는데
상기의 예에서 (1,2)는 '중간값'이라고 표현했다.
결국 각 좌표에 대한 평균값 좌표가 아닌 중간값 좌표를 구해서
거리를 누적하여 답을 내면 되는 것이었다.
작성한 소스는 아래와 같다.
from sys import stdin
if __name__ == "__main__":
n, m = map(int, stdin.readline().split(' '))
x = [0 for _ in range(m)]
y = [0 for _ in range(m)]
mx, my = 0, 0
res = 0
for i in range(m):
x[i], y[i] = map(int, stdin.readline().split(' '))
x.sort()
y.sort()
mx = x[m // 2]
my = y[m // 2]
for i in range(m):
res += abs(x[i]-mx) + abs(y[i]-my)
print(res)
그리 어려운 난이도는 아니었지만
평균값으로만 풀어야 한다는 고정관념을 버리지 않는다면
시간만 질질 끌다가 다른 문제를 풀지 못하는 상황이 발생했을 수도 있을것 같다.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Week of Line Sweep] BOJ 1911 #2 (0) | 2021.01.19 |
---|---|
[Week of Line Sweep] BOJ 1911 #1 (0) | 2021.01.18 |
[Week of Line Sweep] BOJ 2170 (2) | 2021.01.16 |
[Week of DP] BOJ 11660 #2 (6) | 2021.01.10 |
[Week of DP] BOJ 11660 #1 (2) | 2021.01.08 |
Comments