Noah_Developer
Developer Noah
Noah_Developer
전체 방문자
오늘
어제
  • 전체보기 (87)
    • Programmers (33)
      • Level1 (33)
    • FRONT-END (3)
      • React (2)
      • HTML (0)
      • CSS (0)
      • JavaScrpit (1)
    • BACK-END (23)
      • JAVA (14)
      • C (0)
      • Spring (5)
    • DATABASE (11)
      • MySQL (3)
      • Oracle (0)
    • IDE (2)
      • IntelliJ (2)
      • Eclipse (0)
      • VSCode (0)
    • Android (1)
    • 용어 (2)
      • 금융 (2)
    • Developer Diary (5)
      • Web (1)
    • 자격증 (1)
    • Operating System (3)
      • Linux (2)
    • Info (2)

블로그 메뉴

  • 홈
  • 방명록
  • 포트폴리오
  • 깃허브

공지사항

  • 🙏 방문 감사합니다.

인기 글

태그

  • 알고리즘 연습문제
  • String StringBuilder 차이
  • 카카오 블라인드
  • 프로그래머스
  • 카카오공채
  • 코딩테스트 문제 풀이
  • level1
  • 카카오 블라인드 테스트
  • 알고리즘 예제
  • 알고리즘 풀이
  • 코딩테스트 문제
  • programmers
  • 프로그래머스 레벨1
  • 크레인 인형뽑기 풀이
  • 초보자 알고리즘
  • 크레인 인형뽑기 정답
  • 프로그래머스 코딩연습
  • 코딩테스트
  • 프로그래머스 문제풀이
  • 자바 알고리즘 연습문제
  • 코딩테스트 준비
  • 알고리즘 쉬운문제
  • 크레인 인형뽑기
  • programmers level 1
  • 자바 쉬운 알고리즘
  • 알고리즘 블로그
  • 알고리즘 문제
  • 프로그래머스 연습문제
  • 개발일기
  • MySQL

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
Noah_Developer

Developer Noah

[Java] 1차원 배열에서 중복되지 않는 값 찾기
BACK-END/JAVA

[Java] 1차원 배열에서 중복되지 않는 값 찾기

2022. 4. 29. 12:24
728x90
int[] arr = new int[]{1,2,1,3,3,2,4};

위와 같은 정수형 배열에서 중복되지 않는 4의 값을 가져오고 싶을 때,

1차원 배열에서 중복되지 않는 정수를 찾기 위해서는 XOR 연산이 필요하다.

명제 P 명제 Q P ⊻ Q
1 1 0
1 0 1
0 1 1
0 0 0

[XOR 진리표]

 

 

XOR의 연산 과정을 살펴보면, 다음과 같다.

1 2 1 3 3 2 4
000(0)
001(1)
001(1)
010(2)
011(3)
001(1)
010(2)
001(1)
011(3)
001(1)
010(2)
010(2)
000(0)
100(4)
001(1) 011(3) 010(2) 011(3) 010(2) 000(0) 100(4)

[연산 과정]

 

int[] arr = new int[]{1,2,1,3,3,2,4};
int result=0;
for(int i = 0 ; i < arr.length ; ++i) {
	result ^= arr[i];
}
System.out.println("result = " + result);

결과 값 : 4


하지만, 이 방법으로는 짝이 맞지 않는 숫자가 단 하나만 존재한다는 가정이 있기에 가능한 것이지, 2개 이상을 찾기 위해서는 사용이 불가능하다.

 

그래서 짝지 맞지 않는 정수를 찾기 위해 Set을 이용해서 중복값이 발견되면 지울 수 있도록 하였다.

 

int[] arr = new int[]{1,2,1,3,3,2,4,5};

Set<Integer> dup = new HashSet<>();
Set<Integer> noDup = new HashSet<>();
for (int i = 0 ; i < arr.length ; ++i) {
    if (dup.contains(arr[i])) {
        noDup.remove(arr[i]);
    } else {
        noDup.add(arr[i]);
    }
    dup.add(arr[i]);
}
System.out.println("noDup = " + noDup);

결과 값 : [4, 5]

 

728x90
저작자표시 (새창열림)

'BACK-END > JAVA' 카테고리의 다른 글

[Java] 길이만큼 문자채우기  (0) 2021.10.26
[JAVA] URL로 페이지 HTML소스 가져오기 (HttpsURLConnection)  (0) 2021.10.25
[Java] (읽기전용 파일 시스템) 파일서버 디스크 에러  (0) 2021.09.24
[Java] 308 Permanent Redirect  (0) 2021.08.27
[Java] 문자 길이를 고정 처리하여 보기 좋게 만들자.  (0) 2021.05.18
    'BACK-END/JAVA' 카테고리의 다른 글
    • [Java] 길이만큼 문자채우기
    • [JAVA] URL로 페이지 HTML소스 가져오기 (HttpsURLConnection)
    • [Java] (읽기전용 파일 시스템) 파일서버 디스크 에러
    • [Java] 308 Permanent Redirect
    Noah_Developer
    Noah_Developer
    개발 기록 목적을 가진 블로그입니다.

    티스토리툴바