[javascript/프로그래머스] 가장 많이 받은 선물

2024. 5. 19. 11:47· Algorithm
목차
  1. 1. 문제 요약
  2. 2. 풀이

1. 문제 요약

> 문제링크

1. 서로 선물 주고받은 기록이 있다면, 더 많이준 사람에게 선물 +1

2. 기록이 없다면, 선물지수가 큰 사람에게 선물 +1

3. 선물지수도 같다면, 생략

4. 선물지수 = 친구들에게 준 선물 수 - 받은 선물 수

 

 

2. 풀이

/**
 * 프로그래머스 > 2024 KAKAO WINTHERSHIP : 가장 많이 받은 선물
 * @param {string[]} friends : 친구 이름이 담긴 일차원 배열
 * @param {string[]} gifts : ['준사람 받은사람'] 공백으로 구분된 선물 주고받은 기록
 * @returns 다음 달에 가장 많은 선물을 받을 친구의 선물 갯수
 */
export function solution(friends, gifts) {
    let answer = 0;

    const arrObj = new Array();
    const friendsLength = friends.length;
    let giftRecords = new Array(friendsLength).fill(0).map(() => new Array(friendsLength).fill(0));

    //데이터 구조화
    friends.map(val => {
        arrObj.push({ name: val, send: 0, receive: 0, point: 0, reword: 0 });
    });

    //선물기록 생성
    for (let gift of gifts) {
        const [send, receive] = gift.split(' ');
        const sendIdx = arrObj.findIndex(({ name }) => send === name);
        const receiveIdx = arrObj.findIndex(({ name }) => receive === name);
        giftRecords[sendIdx][receiveIdx]++;

        arrObj[sendIdx].send++;
        arrObj[receiveIdx].receive++;
    }
    //선물지수 계산
    arrObj.map(el => [(el.point = el.send - el.receive)]);

    //선물기록 비교
    for (let i = 0; i < friendsLength; i++) {
        for (let j = 0; j < friendsLength; j++) {
            if (i === j) continue; //본인 생략
            if (giftRecords[i][j] > giftRecords[j][i]) arrObj[i].reword++;
            //선물지수 비교
            if (giftRecords[i][j] === giftRecords[j][i] 
            	|| (0 === giftRecords[i][j] && 0 === giftRecords[j][i])) {
                if (arrObj[i].point === arrObj[j].point) return;
                if (arrObj[i].point > arrObj[j].point) arrObj[i].reword++;
            }
        }
    }
    answer = arrObj
        .map(val => {
            return val.reword;
        })
        .reduce((acc, cur) => (acc > cur ? acc : cur));
    return answer;
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm' 카테고리의 다른 글

[Java/백준] 25305.정렬 - 커트라인 (삽입정렬)  (0) 2022.11.10
[Java/백준] 2587.정렬 - 대표값2 (선택정렬, 삽입정렬)  (0) 2022.11.08
[Java/백준] 2750.정렬 - 수 정렬하기1 (삽입정렬)  (0) 2022.11.07
[ Java/ 백준 ] 2480.조건문 - 주사위 세개  (0) 2022.11.04
[Oracle / 프로그래머스] 입양 시각 구하기(2) - LEVEL, WITH AS  (0) 2022.02.17
  1. 1. 문제 요약
  2. 2. 풀이
'Algorithm' 카테고리의 다른 글
  • [Java/백준] 25305.정렬 - 커트라인 (삽입정렬)
  • [Java/백준] 2587.정렬 - 대표값2 (선택정렬, 삽입정렬)
  • [Java/백준] 2750.정렬 - 수 정렬하기1 (삽입정렬)
  • [ Java/ 백준 ] 2480.조건문 - 주사위 세개
devkmee
devkmee
devkmee
devkmee
devkmee
전체
오늘
어제
  • 분류 전체보기 (40)
    • JavaScript & TypeScript (2)
    • vue.js (1)
    • react (0)
    • Java (4)
    • SQL (6)
    • DevOps (5)
    • Web (2)
    • Algorithm (10)
    • Git (2)
    • IDE (8)
    • 후기 (0)
      • [스터디] Go To Learn 2기 (0)
      • 컨퍼런스_세미나_밋업 (0)

블로그 메뉴

  • 홈
  • 태그
  • GitHub

공지사항

인기 글

태그

  • LIST
  • ORACLE #프로그래머스
  • 오라클 #프로그래머스 #LEVEL #WITH AS
  • 객체선택
  • oracle
  • tsconfig
  • ubuntu
  • 가상RESTAPI
  • 레이어조인
  • 이클립스
  • 가상DB
  • map
  • 조건문
  • Generic
  • SQL #ORACLE #프로그래머스
  • 정렬
  • 단축키
  • 좌표계수정
  • 공간조인
  • jsconfig
  • 연습
  • Linux
  • QGIS
  • DevOps
  • HashMap
  • intelij
  • Thread
  • java
  • Vmare
  • VSCode

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
devkmee
[javascript/프로그래머스] 가장 많이 받은 선물
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.