Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 투 포인터
- 로봇 청소기
- 최소 신장 트리
- 파이썬
- 플로이드 와샬
- 2021 KAKAO BLIND RECRUITMENT
- 백트래킹
- 프로그래머스
- SWEA
- 브루트포스
- 우선순위큐
- 2020 카카오 인턴십
- 2019 KAKAO BLIND RECRUITMENT
- GIT
- 구현
- 플로이드와샬
- 다익스트라
- 시뮬레이션
- 투포인터
- 백준
- 스택
- BFS
- 비트마스킹
- Spring
- 조합
- 2018 KAKAO BLIND RECRUITMENT
- 이분탐색
- 크루스칼
- 2020 KAKAO BLIND RECRUITMENT
- 트라이
Archives
- Today
- Total
개발조아
[BOJ/백준] 18513 샘터 파이썬 본문
728x90
문제 링크 : https://www.acmicpc.net/problem/18513
18513번: 샘터
첫째 줄에 자연수 N과 K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N, K ≤ 100,000) 둘째 줄에 N개의 샘터의 위치가 공백을 기준으로 구분되어 정수 형태로 주어진다. (-100,000,000 ≤ 샘터의 위치 ≤
www.acmicpc.net
각각의 샘터에서 좌우로 집을 하나씩 집을 놔보고, 그리고 그 집 양옆으로 집을 하나씩 놔보면 결국 불행도가 최소로 되게 집이 위치하게 된다.
그래서 큐에 집의 좌표를 넣고 집이 k개가 될 때 까지 수행해주면 된다.
결국 BFS를 수행하면 된다.
문제는 범위이다. 샘터는 -1억에서+1억까지다. 거기까지이고 집까지 놀 위치를 고려한다면 2억개가 넘는다. 따라서 그냥 배열로 한다면 메모리 초과가 날 것이다. 그래서 나도 처음에는 메모리 초과가 났다.
이를 좀 줄여보려고 샘터 사이의 거리가 k가 넘는 다면 줄여주고 등등 여러 방법을 생각해봤지만 다 포기하고 단순하게 생각했다.
어차피 집은 필요한 좌표는 집을 놓을 좌표이다. 그래서 최대 10만개 이므로 딕셔너리를 사용했다.
좌표를 키로하고 값을 거리로 하는 딕셔너리를 만들어 풀이 했다.
그래서 현재 점에서 좌우 좌표가 딕셔너리에 있는지에 따라 해당방향을 큐에 넣을지 정했다.
그리고 큐에 넣으면서 집의 개수를 증가 시켜줬는데 이때 집의 개수가 k가 된다면 종료 해줬다.
from sys import stdin
from collections import deque
input = stdin.readline
n,k = map(int, input().split())
points = list(map(int, input().split()))
home_dict = {}
q = deque()
answer = 0
for p in points:
home_dict[p] = 0
q.appendleft((p,0))
def solv():
global answer
h_cnt = 0
while q:
now, cnt = q.pop()
if now-1 not in home_dict:
q.appendleft((now-1, cnt+1))
home_dict[now-1] = cnt+1
answer += cnt+1
h_cnt += 1
if h_cnt == k:
break
if now+1 not in home_dict:
q.appendleft((now+1, cnt+1))
home_dict[now+1] = cnt+1
answer += cnt+1
h_cnt += 1
if h_cnt == k:
break
print(answer)
solv()
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 21278 호석이 두 마리 치킨 파이썬 (0) | 2021.10.07 |
---|---|
[BOJ/백준] 22868 산책(small) 파이썬 (0) | 2021.10.06 |
[BOJ/백준] 22860 폴더 정리(small) 파이썬 (0) | 2021.10.06 |
[BOJ/백준] 14496 그대, 그머가 되어 파이썬 (0) | 2021.10.04 |
[BOJ/백준] 5214 환승 파이썬 (0) | 2021.10.04 |
Comments