문제 설명

n개의 이진수가 문자열 배열 arr로 주어질 때, 이를 모두 xor 연산한 결과를 십진수 숫자로 변환해서 출력하는 프로그램을 구현하세요.


입력 형식

· arr : 이진수가 담긴 문자열 배열


출력 형식

· 계산 결과를 십진수로 변환한 정수를 반환


제약 사항

· 0 < arr.length <= 100

· 0 < arr[i].length <= 100


입출력 예시

· 입력

      · arr = {"10110", "1010", "1110"}

· 출력 : 2

· 설명 : 위 모든 이진수를 xor 연산하면, 이진수로 10이 되며, 십진수로 변환하면 2가 된다.


작성 코드

class Solution {
    public int solution(String[] arr) {
    	
        // arr 배열의 첫 번째 문자열을 2진수로 해석한 결과값으로 초기화
        int answer = Integer.parseInt(arr[0], 2);

		
        for (int i = 1; i < arr.length; i++) {
            int num = Integer.parseInt(arr[i], 2);
            // answer 변수에 num 변수와의 비트 XOR 연산 결과 값을 할당
            // 이는 이전까지 계산한 XOR 값에 새로운 값을 추가하는 것을 의미
            answer ^= num;
        }
        return answer;
    }

    public static void main(String[] args) {
        Solution st = new Solution();
        String[] arr = {"10110", "1010", "1110"};
        System.out.println(st.solution(arr));
    }
}

 

정답 코드

import java.util.Arrays;

class Solution {
    public int solution(String[] arr) {
        if (arr.length == 0) {
            return 0;
        }
        
		// arr 배열을 스트림으로 변환
        return Arrays.stream(arr)
        	// 스트림의 각 요소에 대해 이진수로 표현된 문자열 s를
            // 10진수 int 값으로 변환
            .mapToInt(s->Integer.parseInt(s, 2))
            /* mapToInt() 메서드는 Stream 메서드 중 하나로
            Stream의 각 요소에 대해 지정된 함수를 적용하여 새로운 IntStream을 반환
            */
            /* reduce()는 스트림의 모든 요소를 처리하여 하나의 값을
            반환하는 연산을 수행하는 메서드
            */
            .reduce((x, y) -> x ^ y) // xor 연산자를 사용하여 스트림의 모든
            // 요소를 하나의 int 값으로 축소(reduce)하는 작업을 수행
            .getAsInt();
            // getAsInt()는 OptionalInt 객체에서 int 값을 반환하는 메서드
    }
    
    public static void main(String[] args) {
        Solution st = new Solution();
        String[] arr = {"10110", "1010", "1110"};
        System.out.println(st.solution(arr));
    }
}