본문 바로가기

알고리즘

[알고리즘/Goorm] LV2. 0커플 (Java)

728x90
반응형

 

오늘의 학습 키워드

  • 해시셋(hashSet)

오늘의 회고

1. 문제

문제 URL

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

2. 해결 방안

import java.io.*;
import java.util.*;
import java.util.stream.Stream;

/**
 * [구름] LV2. 0커플 (해쉬)
 */
public class ZeroCouple {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] numbers = Stream.of(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        Set <Integer> hs = new HashSet<>();
        for(int number : numbers) {
            // hs에 현재 number의 상반수가 있는지 체크
            int reverse = -number;
            if(hs.contains(reverse)) { // 있으면 hs에서 제거
                hs.remove(reverse);
            }else { // 없으면 hs에 넣기
                hs.add(number);
            }
        }

        int sum = hs.stream().mapToInt(Integer::intValue).sum();
        /* sum 계산 시 for문 사용할 경우
        int sum = 0;
        for (Integer num : hs) {
            sum += num.intValue();
        }
         */
        System.out.println(sum);
    }
}
  • for문에서는 hashSet에 number의 상반수가 들어있으면 상반수를 제거하고, 없으면 number를 추가한다.
  • for문이 끝나면 hashSet에는 상반수 짝이 없는 값만 남게 된다.
  • hashSet에 남아있는 값을 모두 더해서 출력한다.

3. 피드백

  • 꼭 해시셋을 안써도 배열이나 다른 자료구조로 해결할 수 있을 것 같다. 일단 문제 유형이 해시라 해시로 ^_^..

4. 새로 알게된 것

int sum = hs.stream().mapToInt(Integer::intValue).sum();
  • stream 이용해 한줄로 합산 계산하기.. 와우... 편리편리.. 스트림좀 익숙해지자
728x90
반응형