삼성 SW역량테스트 기출 / 2018 상반기 오후 2번 문제 병원 거리 최소화하기 - 조합 / Python 파이썬

2024. 9. 19. 00:21·coding test - python/Code Tree
728x90
반응형

 

*문제 출처는 삼성전자, 코드트리에 있습니다.

 

삼멘 4일차

문제 제목: 병원 거리 최소화하기

문제 사이트: https://www.codetree.ai/training-field/frequent-problems/problems/min-of-hospital-distance/submissions?page=1&pageSize=20&tier=11%2C11

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai


나의 풀이

 

처음 BFS, 조합 구현 코드에서 메모리 초과가 났었음

이유: 조합 코드에서 리스트를 저장하는 과정에서 초과

해결: 조합을 저장하지 않고 만든 즉시 병원과 사람들간 거리 최소 구함

n, m = map(int, input().split())

maps = [list(map(int, input().split())) for _ in range(n)]
person = []  # 사람 위치
hospital = []  # 병원 위치

# 사람들 위치와 병원 위치 저장
for i in range(n):
    for j in range(n):
        if maps[i][j] == 1:
            person.append((i, j))
        elif maps[i][j] == 2:
            hospital.append((i, j))

answer = 1e5  # 최소 거리 합을 저장할 변수

# 조합을 생성하면서 바로 처리하는 재귀 함수
def combination(num, arr, start):
    global answer
    if len(arr) == num:
        # 조합이 완성되면 거리 계산
        total_dist = 0
        for px, py in person:
            p_dist = 1e5
            for cx, cy in arr:
                dist = abs(px - cx) + abs(py - cy)
                p_dist = min(p_dist, dist)
            total_dist += p_dist
        answer = min(answer, total_dist)
        return
    
    for i in range(start, len(hospital)):
        combination(num, arr + [hospital[i]], i + 1)

# m개의 병원을 선택하는 조합 만들기
combination(m, [], 0)

print(answer)

 


※ 알아야 할 것

- 메모리 초과나면 리스트에 조합 저장하지않고 바로 답구하기

728x90
반응형

'coding test - python > Code Tree' 카테고리의 다른 글

삼성 SW역량테스트 기출 / 2017 상반기 오후 2번 문제 방화벽 설치하기 - BFS, 조합(백트래킹), 완전탐색 / Python 파이썬  (3) 2024.09.19
삼성 SW역량테스트 기출 / 2019 상반기 오후 2번 문제 바이러스 백신 - BFS, 조합 / Python 파이썬  (8) 2024.09.19
삼성 SW역량테스트 기출 / 2018 하반기 오전 2번 문제 토스트 계란들 - BFS / Python 파이썬  (3) 2024.09.17
삼성 SW역량테스트 기출 / 2017 하반기 오후 2번 문제 연산자 배치하기 - DFS / Python 파이썬  (0) 2024.09.14
삼성 SW역량테스트 기출 / 2017 하반기 오전 1번 문제 조삼모사 - 조합, 백트래킹 / Python 파이썬  (1) 2024.09.14
'coding test - python/Code Tree' 카테고리의 다른 글
  • 삼성 SW역량테스트 기출 / 2017 상반기 오후 2번 문제 방화벽 설치하기 - BFS, 조합(백트래킹), 완전탐색 / Python 파이썬
  • 삼성 SW역량테스트 기출 / 2019 상반기 오후 2번 문제 바이러스 백신 - BFS, 조합 / Python 파이썬
  • 삼성 SW역량테스트 기출 / 2018 하반기 오전 2번 문제 토스트 계란들 - BFS / Python 파이썬
  • 삼성 SW역량테스트 기출 / 2017 하반기 오후 2번 문제 연산자 배치하기 - DFS / Python 파이썬
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Python
    소수
    백준
    programmers
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
삼성 SW역량테스트 기출 / 2018 상반기 오후 2번 문제 병원 거리 최소화하기 - 조합 / Python 파이썬
상단으로

티스토리툴바