본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 1238. Contact - Python

by chaemj97 2022. 4. 21.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15B1cKAKwCFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

< 📝 문제 >
비상연락망과 연락을 시작하는 당번에 대한 정보가 주어질 때, 가장 나중에 연락을 받게 되는 사람 중 번호가 가장 큰 사람을 구하는 함수를 작성하시오.


< ❓ 생각 >


< 💻 코드 >

# 테스트 케이스 10개
for tc in range(1,11):
    # 입력 받는 데이터 길이, 시작점
    length, start = map(int,input().split())

    # 받은 데이터를 연결 형태로 바꾸기
    InputData = list(map(int,input().split()))
    contact = [[0]*101 for _ in range(101)]
    for k in range(0,length,2):
        contact[InputData[k]][InputData[k+1]] = 1

    # 연락 유무(중복 방문 막기), 거리도 표시
    used = [0]*101
    used[start] = 1

    # 이동 시작
    
    # BFS 선입선출
    q = [start]
    # 결과
    result = start
    
    while q:
        num= q.pop(0)
        
        # result 갱신 -> 거리가 멀거나 거리가 같지만 연락받는 사람의 번호가 큰 경우
        if used[result] < used[num] or (used[result] == used[num] and result < num):
            result = num
            
        for i in range(101):
            # 연결되어있고, 연락 한 적 없다면 -> q에 등록, 거리 표시
            if contact[num][i] and used[i]==0:
                q.append(i)
                used[i] = used[num]+1
                
    print(f'#{tc} {result}')


< ❗ 느낀 점 >

오랜만에 알고리즘 문제 풀어서 힘들었다... 매일 2개씩 풀어야지!!!!

q랑 stack은 하도 많이 풀어서 아직 머리 속에 있어서 다행..

728x90
반응형

댓글