Problem details

https://school.programmers.co.kr/learn/courses/30/lessons/258712

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Ideas

  1. 각자의 선물 지수를 따로 기록해둔다.
  2. 서로 선물을 주고 받은 내용을 2차원 맵으로 기록해둔다.
    (기록을 이름으로 검색하고 싶어서 맵을 사용했지만, 약간의 스킬을 쓰면 2차원 배열로도 저장이 가능하다.)

 

Answer code (Java)

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String[] friends, String[] gifts) {
    	
        Map<String, Integer> answerList = new HashMap<String, Integer>();
        Map<String, Integer> pointList = new HashMap<String, Integer>();
        Map<String, HashMap<String, Integer> > board = new HashMap<String, HashMap<String, Integer> >();
        String[] splStr;
        
        String giver, taker;
        
        for (String gift: gifts) {
            splStr = gift.split(" ");
            giver = splStr[0];
            taker = splStr[1];
            
            // 각자의 선물 지수를 따로 기록해둔다.
            pointList.put(giver, pointList.getOrDefault(giver, 0) + 1);
            pointList.put(taker, pointList.getOrDefault(taker, 0) - 1);
            
            // 서로 선물을 주고 받은 내용을 2차원 맵으로 기록해둔다.
            HashMap<String, Integer> mp = board.getOrDefault(giver, new HashMap<String, Integer>());
            mp.put(taker, mp.getOrDefault(taker, 0) + 1);
            board.put(giver, mp);
        }
        
        for (int i = 0; i < friends.length - 1; i++) {
            for (int j = i + 1; j < friends.length; j++) {
                HashMap<String, Integer> mp = board.getOrDefault(friends[i], new HashMap<String, Integer>());
                int AToB = mp.getOrDefault(friends[j], 0);
                HashMap<String, Integer> mp2 = board.getOrDefault(friends[j], new HashMap<String, Integer>());
                int BToA = mp2.getOrDefault(friends[i], 0);
                
                int aPoint = pointList.getOrDefault(friends[i], 0);
                int bPoint = pointList.getOrDefault(friends[j], 0);
                
                if (AToB > BToA) {
                    answerList.put(friends[i], answerList.getOrDefault(friends[i], 0) + 1);
                } else if (BToA > AToB) {
                    answerList.put(friends[j], answerList.getOrDefault(friends[j], 0) + 1);
                } else if (aPoint > bPoint) {
                    answerList.put(friends[i], answerList.getOrDefault(friends[i], 0) + 1);
                } else if (bPoint > aPoint) {
                    answerList.put(friends[j], answerList.getOrDefault(friends[j], 0) + 1);
                }
            }
        }
        
        int answer = 0;
        for (String key: answerList.keySet()) {
            if (answerList.get(key) > answer) {
                answer = answerList.get(key);
            }
        } 
        
        return answer;
    }
}

 

+ Recent posts