코딩기록

코테) 맞팔 관계인 쌍의 수 리턴 본문

프론트/JS)코딩테스트

코테) 맞팔 관계인 쌍의 수 리턴

뽀짝코딩 2025. 1. 17. 13:36
728x90

 

문제

SNS에서 서로가 팔로우를 했다는 것을 '맞팔'이라고 표현합니다.
다음 팔로우 관계를 나타낸 배열을 통해 서로 맞팔 관계인 쌍의 수를 리턴하는 함수를 작성하세요.
이때 ["철수", "영희"] 라는 정보는 철수가 영희를 팔로우 했음을 나타냅니다.

 

입력
 팔로우 관계가 표현된 String 2차원 배열 A.

출력
 맞팔 관계인 쌍의 수

매개변수 : Stirng[][] A
리턴타입 : int

 

풀이

const solution = (A) => {
  const followSet = new Set(); // 팔로우 관계 저장
  let mutualCount = 0; // 맞팔 관계 수

  for (const [a, b] of A) {
    const reverseRelation = `${ b } -> ${ a }`; // 반대 관계를 문자열로 생성
    if (followSet.has(reverseRelation)) {
      mutualCount++; // 반대 관계가 존재하면 맞팔로 간주
    }
    followSet.add(`${ a } -> ${ b }`); // 현재 관계를 추가
  }

  return mutualCount;
}

console.log("solution", solution([["철수", "영희"], ["영희", "진수"], ["진수", "동수"], ["진수", "진호"]])); //결과는: 0

위 코드의 for (const [a, b] of A)는 배열 A의 각 원소(쌍)를 순회하며, 각 쌍에 대해 팔로우 관계를 처리하는 구조. 

 

  1. 배열 A의 순회
    • 배열 A는 2D 배열입니다. 각 원소는 [a, b] 형태로, a는 팔로우하는 사람, b는 팔로우 받는 사람.
    • 예를 들어, ["철수", "영희"]는 a = "철수", b = "영희"로 해석.
  2. 반복문 내부의 동작
    • for (const [a, b] of A)는 배열 A에서 각 원소(쌍)을 하나씩 꺼내고, 그 원소를 a와 b라는 변수에 할당.
    • a는 팔로우하는 사람, b는 팔로우 받는 사람.
  3. reverseRelation 문자열 생성
    • reverseRelation은 현재 쌍 [a, b]의 반대 방향 팔로우 관계를 나타냄. 즉, b가 a를 팔로우하는 관계를 나타내는 문자열을 생성.
    • 예를 들어, a = "철수", b = "영희"일 경우, reverseRelation은 "영희->철수".
    • const reverseRelation = `${b}->${a}`;
  4. 반대 관계가 이미 존재하는지 확인
    • if (followSet.has(reverseRelation)) {
        mutualCount++; // 반대 관계가 존재하면 맞팔로 간주
      }
    • followSet은 이미 팔로우 관계를 저장한 Set 객체입.
    • followSet.has(reverseRelation)는 반대 관계가 followSet에 이미 존재하는지 확인하는 조건문.
      • 예를 들어, 현재 "철수" -> "영희"가 팔로우 관계로 추가되었고, reverseRelation이 "영희->철수"일 경우, followSet에 "영희->철수"가 존재하면 맞팔 관계로 간주하고, mutualCount를 1 증가시킴.
  5. followSet.add(`${a}->${b}`);
     
    • 현재 팔로우 관계인 "a->b"를 followSet에 추가합니다. 예를 들어, a = "철수", b = "영희"일 경우 "철수->영희"가 followSet에 저장.

 

 

동작

const A = [
  ["철수", "영희"], ["영희", "진수"], ["진수", "동수"], ["진수", "진호"]
];

첫 번째 반복 (["철수", "영희"]):

  • reverseRelation = "영희->철수". followSet은 빈 상태이므로 반대 관계가 존재하지 않습니다.
  • followSet.add("철수->영희").

최종적으로 맞팔 관계는 없고, mutualCount는 0으로 반환.

 

${a}->${b} 이 템플릿 리터럴 안에 -> 는 단순히 문자열의 일부임.

 

 

 

 

반응형
Comments