공간이 연속 할 경우 합치기

2024. 1. 22. 00:18·프로그래밍

한쌍의 시작점, 끝점 목록과 이 목록에 추가할 한쌍의 시작점, 끝점이 주어질때,

이를 직선 상에서 연속 될 경우, 하나로 묶는 방법이다.

 

예를 들어,

 

(1, 5), (8, 10) 과 새로 추가할 점으로 (6, 7) 이 주어진다면,

(1, 10) 으로 반환한다.

 

이를 표현하는 코드를 작성하면, 아래와 같다.

 

from bisect import bisect_left

def find_connected_lists(point_list, new_point):
    # 새로 들어온 순서 쌍을 배치할 위치를 찾는다.
    idx = bisect_left(point_list, new_point)
    l_merge = False
    r_merge = False
    
    # 앞쪽을 합쳐야 되면 l_merge 를 True 로 
    if new_point[0] - point_list[idx-1][1] == 1:
        l_merge = True
    # 뒷쪽을 합쳐야 되면 r_merge 를 True 로
    if point_list[idx][0] - new_point[1] == 1:
        r_merge = True

    # 앞쪽만 합쳐야 할때
    if l_merge == True and r_merge == False:
        point_list[idx - 1][1] = new_point[1]
    # 뒷쪽만 합쳐야 할때
    elif l_merge == False and r_merge == True:
        point_list[idx][0] = new_point[0]
    # 양쪽 다 합쳐야 할때
    elif l_merge == True and r_merge == True:
        point_list[idx - 1][1] = point_list[idx][1]
        # 앞쪽으로 합친 후 뒷쪽 삭제
        point_list.pop(idx)
    # 아무것도 아니라 중간에 추가해야 할때
    else:
        point_list.insert(idx, new_point)

    return point_list

point_list = [[1, 5], [6, 6], [7, 7], [20, 25]]
point_list.sort()

new_point = [9, 19]
print(find_connected_lists(point_list, new_point))

 

위 코드는 주로, 파일 시스템, 메모장 칸 등에서 삭제 되면서 하나의 공간으로 다시 합칠 필요가 있을 때 사용하면 된다.

'프로그래밍' 카테고리의 다른 글

BFS 알고리즘 (백준 2021번: 최소 환승 경로)  (0) 2024.08.02
유니온 파인드 알고리즘 (백준 1717: 집합의 표현)  (0) 2024.02.03
다익스트라 알고리즘 (백준 1753번: 최단경로)  (0) 2024.01.23
DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것  (0) 2024.01.10
파이썬3의 딕셔너리의 keys() 메서드 반환 값은 리스트가 아니야.  (0) 2024.01.08
'프로그래밍' 카테고리의 다른 글
  • 유니온 파인드 알고리즘 (백준 1717: 집합의 표현)
  • 다익스트라 알고리즘 (백준 1753번: 최단경로)
  • DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것
  • 파이썬3의 딕셔너리의 keys() 메서드 반환 값은 리스트가 아니야.
virbr0.net
virbr0.net
  • virbr0.net
    virbr0.net
    virbr0.net
  • 전체
    오늘
    어제
    • 분류 전체보기
      • SIP
      • HTTP
      • OS
      • 프로그래밍
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rtp inject
    인터넷전화
    RTP
    셀프칭찬
    DFS
    HTTP
    클라우드
    파일명
    윈도우서버
    URL Rewrite
    alteon
    파일명 없이 다운로드
    ADC
    BFS
    IIS
    유기농 배추
    회사생활
    브로드웍스
    가상화
    인증서
    시간복잡도
    해외발신
    최단경로
    딕셔너리
    SBC
    RDP
    다익스트라
    파이썬
    SIP
    chunked
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
virbr0.net
공간이 연속 할 경우 합치기
상단으로

티스토리툴바