반응형
문제 유형 : 구현
소요 시간: 20분(+-5분)
작성 코드
1차 구현
class Solution {
public String lengthCheck(int n, String given) {
if (given.length() < n) {
int gap = n - given.length();
return "0".repeat(gap) + given;
}
return given;
}
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for (int i = 0; i < n; i++) {
StringBuilder row = new StringBuilder();
int arr1Num = arr1[i];
int arr2Num = arr2[i];
String arr1binary = lengthCheck(n, Integer.toBinaryString(arr1Num));
String arr2binary = lengthCheck(n, Integer.toBinaryString(arr2Num));
for (int j = 0; j < n; j++) {
// 0 0
if (arr1binary.charAt(j) == '0' && arr2binary.charAt(j) == '0') {
row.append(' ');
continue;
}
// 1 1, 1 0, 0 1
row.append('#');
}
answer[i] = row.toString();
}
return answer;
}
}
2차 구현
class Solution {
public static String decToBinary(int num, int n) {
StringBuilder binString = new StringBuilder();
for (int i = n - 1; i >= 0; i--) {
int k = num >> i;
binString.append(((k & 1) > 0)?1:0);
}
return binString.toString();
}
public static String secretMapGen(String bin1, String bin2,int n) {
StringBuilder row = new StringBuilder();
for (int i = 0; i < n; i++) {
if (bin1.charAt(i) == '0' && bin2.charAt(i) == '0') row.append(" ");
else row.append("#");
}
return row.toString();
}
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for (int i = 0; i < n; i++) {
answer[i] = secretMapGen(
decToBinary(arr1[i], n),
decToBinary(arr2[i], n),
n
);
}
return answer;
}
}
접근 방식
1차 구현
- 10진법을 2진법으로 만들고 2진번을 비교해 둘다 0이 아니면 무조건 #을 집어 넣었다.
- 10진법을 2진법으로 만드는 내장함수를 사용했다. -> Integer.toBinaryString(int)
- 중요한 사실은 실제 상황에서는 사용하지 못할 거 같다. 단지 JetBrains의 추천이었다.
- 이진법의 길이가 주어진 n의 길이보다 클수는 없지만 작을 수는 있기에 길이를 확인하는 함수를 구현하였다.
2차 구현
- 1차 구현과 같은 로직을 사용하였으나 다시 풀면서 Integer.toBinaryString() 생각나지 않았다.
- 그래서 byte를 비교하는 방식으로 2진법으로 바꾸었다. 의외로 이진수의 길이를 정해 줄 수 있어 1차 구현과 같은 길이 검사 함수가 필요 없었다.
개선 사항
- 결론적으로 1차 구현 2차 구현 둘다 n^2이다 하지만 1차구현과 2차구현을 조합하면 n과 근사치로 가능할 수 있겠다는 생각이 들어 도전해 볼만하다고 본다. 하지만 n^2도 통과를 하는걸 보니 문제의 의도인가도 싶다.
반응형
'알고리즘 > 카카오 모의고사' 카테고리의 다른 글
2018 카카오 BLIND RECRUITMENT 캐시 (1) | 2024.08.30 |
---|