백준 SILVER 2(친구)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-02-01

  • 해결 방법 :

    • 2-친구가 되기 위한 조건은 서로 친구이거나, 건너서 친구이거나
      • 각 친구 사이를 돌며 서로 직접 친구인지 체크후 map에 저장
      • 건너서 친구인 값 저장 후 map에 저장
    • map에 저장된 값은 각 인덱스 별 친구인 인덱스 값
      • 이 값은 중복된 값이 포함되어 있으므로 중복 제거 후
      • 가장 긴 2-친구를 가진 사람의 2-친구 수 반환
  • 회고 :

    • 중복 제거 생각하기
    • 길이가 0일 때 reduce 호출 불가능한 것 생각하기
  • 코드

    const fs = require('fs');
    const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
    const input = fs.readFileSync(filePath).toString().trim();
    
    solution(input);
    
    function solution(props) {
      props = props.split('\n').slice(1);
      const map = new Map();
    
      props.forEach((prop, index) => {
        const temp = [];
    
        prop.split('').forEach((isFriend, i) => {
          if (isFriend === 'Y') {
            map.set(index, [...(map.get(index) || []), i]);
            temp.push(i);
          }
        });
    
        temp.forEach((e, i) => {
          map.set(e, [...(map.get(e) || []), ...temp.slice(0, i), ...temp.slice(i + 1)]);
        });
      });
    
      const uniqueArray = [...map.entries()].map(([key, value]) => [key, [...new Set(value)]]);
    
      console.log(
        uniqueArray.length
          ? uniqueArray.reduce((a, b) => (a[1].length > b[1].length ? a : b))[1].length
          : 0,
      );
    }
    
  • 출처: 백준