배꼽파지 않도록 잘 개발해요

99클럽 코테 스터디 31일차 TIL - Clear Cold Water 본문

코딩테스트/99클럽

99클럽 코테 스터디 31일차 TIL - Clear Cold Water

꼽파 2024. 8. 22. 10:17


function calculateDistances(N, connections) {
    // 트리 구조를 초기화
    const tree = new Map();
    for (let i = 1; i <= N; i++) {
        tree.set(i, []);
    }
    
    // 입력된 연결 정보를 바탕으로 트리 구축
    for (const [E_i, B1_i, B2_i] of connections) {
        tree.get(E_i).push(B1_i);
        tree.get(E_i).push(B2_i);
    }
    
    // 거리를 -1로 초기화하고, 농장(파이프 1)의 거리를 1로 설정
    const distance = new Array(N + 1).fill(-1);
    distance[1] = 1;
    
    // BFS를 사용하여 거리를 계산
    const queue = [1];
    
    while (queue.length > 0) {
        const current_pipe = queue.shift();
        const current_distance = distance[current_pipe];
        
        // 연결된 모든 파이프를 순회
        for (const child of tree.get(current_pipe)) {
            if (distance[child] === -1) {  // 아직 방문하지 않은 경우
                distance[child] = current_distance + 1;
                queue.push(child);
            }
        }
    }
    
    // 첫 번째 요소(인덱스 0은 사용하지 않음)를 제외한 거리 배열 반환
    return distance.slice(1);
}

// 입력 읽기 및 메인 로직
function main() {
    const input = require('fs').readFileSync('/dev/stdin', 'utf8').trim().split('\n');
    
    // N과 C를 읽기
    const [N, C] = input[0].split(' ').map(Number);
    
    // 연결 정보를 읽기
    const connections = input.slice(1).map(line => line.split(' ').map(Number));
    
    // 거리를 계산
    const distances = calculateDistances(N, connections);
    
    // 거리 출력
    for (const dist of distances) {
        console.log(dist);
    }
}

// 메인 함수 실행
main();

728x90