원본 : https://school.programmers.co.kr/learn/courses/30/lessons/147354
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
class Solution {
public int solution(int[][] data, int col, int row_begin, int row_end) {
List<Integer> sList = new ArrayList<>();
Arrays.sort(data, (o1, o2) -> {
if (o1[col - 1] == o2[col - 1]) {
return o2[0] - o1[0];
} else {
return o1[col - 1] - o2[col - 1];
}
});
for (int i = row_begin - 1; i < row_end; i++) {
int s = 0;
for (int tuple : data[i]) {
s += tuple % (i + 1);
}
sList.add(s);
}
sList.sort(Comparator.reverseOrder());
String binary = decimalToBinary(sList.get(0));
for (int i = 1; i < sList.size(); i++) {
String binaryTemp = decimalToBinary(sList.get(i));
binary = xor(binary, binaryTemp);
}
return binaryToDecimal(binary);
}
public static String decimalToBinary(int num) {
StringBuilder sb = new StringBuilder();
while (num > 0) {
sb.append(num % 2);
num /= 2;
}
return sb.reverse().toString();
}
public static int binaryToDecimal(String binary) {
int result = 0;
StringBuilder sb = new StringBuilder(binary).reverse();
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == '1') {
result += Math.pow(2, i);
}
}
return result;
}
public static String xor(String num1, String num2) {
StringBuilder sb1 = new StringBuilder(num1).reverse();
StringBuilder sb2 = new StringBuilder(num2).reverse();
if (sb1.length() > sb2.length()) {
for (int i = 0; i < num1.length() - num2.length(); i++) {
sb2.append(0);
}
} else if (sb1.length() < sb2.length()) {
for (int i = 0; i < num2.length() - num1.length(); i++) {
sb1.append(0);
}
}
StringBuilder result = new StringBuilder();
char[] chArr1 = sb1.toString().toCharArray();
char[] chArr2 = sb2.toString().toCharArray();
for (int i = 0; i < chArr1.length; i++) {
if (chArr1[i] != chArr2[i]) {
result.append(1);
} else {
result.append(0);
}
}
result.reverse();
int idx = result.indexOf("1");
return idx >= 0 ? result.substring(idx) : "0";
}
}
마법의 엘리베이터 (연습문제) (0) | 2023.01.03 |
---|---|
유사 칸토어 비트열 (연습문제) (0) | 2023.01.02 |
크기가 작은 부분 문자열 (연습문제) (0) | 2023.01.02 |
숫자 카드 나누기 (연습문제) (0) | 2022.12.12 |
디펜스 게임 (연습문제) (0) | 2022.12.12 |
댓글 영역