Algorithm/Problem Solving

[Java] Codility - OddOccurrencesInArray 문제 2가지 풀이

JeongKyun 2022. 9. 5.
반응형

문제

문제 바로가기

 


 

Task Score

100%

 

Correctness

100%

 

Performance

100%

 


 

문제 풀이 1 (첫 풀이)

import java.util.*;

public class L2_OddOccurrencesInArray {
    public static void main(String[] args) {
        int[] candiArr = {9, 3, 9, 7, 3, 9, 9};

        Map<Integer, Integer> candiMap = new HashMap<>();

        for (int i = 0; i < candiArr.length; i++) {
            if(candiMap.containsKey(candiArr[i]))
                candiMap.put(candiArr[i], candiMap.get(candiArr[i]) + 1);
            else
                candiMap.put(candiArr[i], 1);

        }

        for(int candi : candiMap.keySet()){
            if(candiMap.get(candi) % 2 == 1){
                System.out.println(candi);
                break;
            }
        }
    }
}

Map을 사용하여 value에 카운트를 남기고 마지막에 홀수만 찾는 로직이 마음에 안들어 조금 더 개선해보았다.

 

 

문제 풀이 2 (개선)

import java.util.*;

public class L2_OddOccurrencesInArray {
    public static void main(String[] args) {
        int[] candiArr = {9, 3, 9, 7, 3, 9, 9};

        Set<Integer> candiSet = new HashSet<>();
        for (int i = 0; i < candiArr.length; i++) {
            if(candiSet.contains(candiArr[i]))
                candiSet.remove(candiArr[i]);
            else
                candiSet.add(candiArr[i]);
        }

        int answer = candiSet.iterator().next();
        System.out.println(answer);
    }
}

굳이 Map에 담아뒀다가 또 for문을 돌리는게 아닌, set의 remove와 add를 사용하여 짝수면 결국 마지막에 사라지는것을 생각하여 구현하였다.

댓글

💲 많이 본 글