문제 설명
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));
}
}
'연습 코딩테스트' 카테고리의 다른 글
연습문제 1-4(4) 16진수 s를 이진수로 변환 (0) | 2023.04.04 |
---|---|
연습문제 1-4(3) n의 양의 약수의 개수 (0) | 2023.04.03 |
연습문제 1-4(1) ASCII Code 문자열 출력 (0) | 2023.04.03 |
연습문제 1-3(5) 짜장면 상금 총금액과 우승자 (0) | 2023.04.01 |
연습문제 1-3(4) 문자열 계산식 (0) | 2023.04.01 |