[LeetCode][JAVA] 2225. Find Players With Zero or One Losses

이호준·2024년 1월 15일
0

LeetCode

목록 보기
8/11

문제링크: 2225. Find Players With Zero or One Losses


📖 문제설명

정수로 표시되는 승자, 패자[winner, loser]로 이루어진 이차원 배열 matches를 입력 받았을 때 주어진 조건을 만족하는 배열을 반환하시오.

  • answer[0] 한번도 지지 않은 player
  • answer[1] 단 한번만 패배한 player

💡 접근방식

매치에 포함되어 있는 플래이어 정보와 대전 정보를 알맞은 자료구조에 넣어서 연산을 진행하는 것이 중요하다 생각했다. player를 저장하는 곳은 중복을 혀용할 필요 없고 순서도 상관없으니 Set구조가 알맞다 생각했고 한 번만 패배하는 player를 저장하는 곳도 똑같이 생각했다. 단 패배하는 player를 저장하는 곳은 최소 2번의 패배 이상을 기록 할 수 있어야 의미가 있으므로 List를 사용하였다.

코드:

class Solution {
    public List<List<Integer>> findWinners(int[][] matches) {
        Set<Integer> players = new HashSet<>();
        Set<Integer> oneLoss = new HashSet<>();
        List<Integer> losser = new ArrayList<>();

        for(int[] i : matches){
            players.add(i[0]);
            players.add(i[1]);
            losser.add(i[1]);
        }

        Collections.sort(losser);
        ListIterator<Integer> it = losser.listIterator();
        while(it.hasNext()){
            int current = it.next();
            players.remove(current);
            if(oneLoss.remove(current)){
                while(it.hasNext()){
                    int next = it.next();
                    if(next!=current){
                        next = it.previous();
                        break;
                    }
                }
                continue;
            }
            oneLoss.add(current);
        }

        List<List<Integer>> ans = new ArrayList<>();
        ArrayList<Integer> playerList = new ArrayList<>(players);
        ArrayList<Integer> LossList = new ArrayList<>(oneLoss);
        Collections.sort(playerList);
        Collections.sort(LossList);
        ans.add(playerList);
        ans.add(LossList);
        return ans;
    }
}

📌 개선

loss정보를 List로 대전 자체를 기록하기 보다는 Map을 활용하여 구현하면 더 깔끔하게 코드를 짤 수 있을 거 같다.

profile
나아가는 중입니다.

0개의 댓글