developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삼성코테자바준비
  • 백준파이썬풀이
  • 카카오코테
  • ARIMA모형
  • 삼성코테자바풀이
  • 코테파이썬
  • 운영체제인터럽트
  • 삼성코테자바꿀팁
  • BOJ파이썬풀이
  • 삼성코테구현풀이
  • 삼성코테준비
  • MA모형
  • 삼성코테파이썬풀이
  • 삼성코테파이썬준비
  • 통계분석
  • 카카오코테java풀이
  • 삼성코테파이썬
  • 통계학
  • 삼성코테기출
  • SW역량테스트파이썬
  • Arima
  • 데이터분석
  • c++디자인패턴
  • 시계열분석
  • 삼성코테구현문제추천
  • c++ 빌더 패턴
  • 시계열
  • AR모형
  • SW역량테스트파이썬풀이
  • 삼성코테기출자바풀이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

알고리즘/알고리즘문풀

2020 카카오 인턴십 - 동굴탐험(python)

2021. 6. 29. 21:52

❓ 문제 - 2020 카카오 인턴 동굴탐험 문제 - python 풀이법

출처 

(https://programmers.co.kr/learn/courses/30/lessons/67260?language=python3) 

 

코딩테스트 연습 - 동굴 탐험

9 [[0,1],[0,3],[0,7],[8,1],[3,6],[1,2],[4,7],[7,5]] [[8,5],[6,7],[4,1]] true 9 [[8,1],[0,1],[1,2],[0,7],[4,7],[0,3],[7,5],[3,6]] [[4,1],[5,2]] true 9 [[0,1],[0,3],[0,7],[8,1],[3,6],[1,2],[4,7],[7,5]] [[4,1],[8,7],[6,5]] false

programmers.co.kr

 

📝 문제해결법 

1. 완전탐색인 BFS 사용

2. A와 B가 연결되어 있으면 graph를 통해 연결된 것을 구현

3. 선행조건(A를 방문해야 B방문가능)을 구현 위해 딕셔너리 표현 사용

  • precedeA[a] = b -> a(key)방문하면 b(value)방문 가능
  • precedeB[b] = a -> b(key)를 방문하려면 a(value) 방문 필요, precedeB는 선행조건을 쉽게 찾기 위해 사용
  • b에 0이 들어오면 모두다 방문 불가하므로 False 반환 (모든 동굴은 0을 통해 방문할 수 있으므로)
  • a에 0이 들어오면 (원래 0동굴에 방문해야 다른 곳이 방문 가능하므로) b는 0

4. BFS 실행시에 일단 A방문해야하는데(선행조건) 만족되지 못했을 때 B를 방문했다면 아직 방문하지 못하는 상태이므로 visited[now] = 2

5. graph와 연결된 값들을 중에 visited[x] 값이 0이면 큐에 넣고 방문처리

6. graph와 연결된 값이 A(선행조건, precedeA 값중에 1이상인 값이 존재)이면 이 선행조건을 통해서 방문가능한 값 B가 방문 준비상태(visited 값이 2)이면 그 값을 큐에 넣고 visited 값을 1로 변경(방문처리)하고 그 후 선행조건 없애기

출처 : (https://deok2kim.tistory.com/48)

 

[python] 프로그래머스 - 동굴 탐험 (2020 카카오 인턴십)

문제 해결 1. 그래프 문제 2. 주어진 path 로 인접리스트를 만든다. 3. 주어진 order 로 딕셔너리를 만든다.  (1) a 를 방문해야 b 를 방문할 수 있다.  (2) a를 키, b를 밸류로 하는 딕셔너리를 만든다 | a

deok2kim.tistory.com

해당 블로그의 풀이 방법과 소스코드를 참고해서 공부하였습니다.

 

 

💻 소스코드 

# python 풀이법
from collections import deque
def solution(n, path, order):
    answer = True
    graph = {n:[] for n in range(n)}
    for x, y in path:
        graph[x].append(y)
        graph[y].append(x)

    precedeA = {}
    precedeB = {}

    for a, b in order:
        precedeA[a] = b
        precedeB[b] = a
        if b == 0:
            return False
        if a == 0:
            precedeA[0] = 0

    visited = [0] * n
    visited[0] = 1

    q = deque()
    q.append(0)

    while q:
        now = q.popleft()
        #알고보니 아직 못 가는 상태
        if now == precedeA.get(precedeB.get(now)):
            visited[now] = 2
        else:
            for x in graph[now]:
                if visited[x] == 0:
                    q.append(x)
                    visited[x] = 1

                    if precedeA.get(x): # 선행조건일 때
                        if visited[precedeA[x]] == 2: # 이 선행조건을 필요로 하는 친구가 준비상태이면
                            q.append(precedeA[x])
                            visited[precedeA[x]] = 1
                        precedeA[x] = 0

    for i in visited:
        if i == 0:
            return False
    return answer

 

 

 

'알고리즘 > 알고리즘문풀' 카테고리의 다른 글

2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어(python)  (0) 2021.07.20
2019 카카오 겨울 인턴십 코딩테스트 - 호텔 방 배정 건너기(python)  (0) 2021.07.15
2019 카카오 겨울 인턴십 코딩테스트 - 징검다리 건너기(python)  (0) 2021.07.12
2019 카카오 코딩테스트 - 블록게임(python)  (0) 2021.07.08
2019 카카오 코딩테스트 - 매칭점수(python)  (0) 2021.07.05
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • 2019 카카오 겨울 인턴십 코딩테스트 - 호텔 방 배정 건너기(python)
    • 2019 카카오 겨울 인턴십 코딩테스트 - 징검다리 건너기(python)
    • 2019 카카오 코딩테스트 - 블록게임(python)
    • 2019 카카오 코딩테스트 - 매칭점수(python)
    developer-ellen
    developer-ellen

    티스토리툴바