-
[1차] 비밀지도알고리즘/프로그래머스 2020. 8. 20. 14:45
출처 : https://programmers.co.kr/learn/courses/30/lessons/17681?language=java
문제가 넘나 길당. 근데 입력받은 수를 이진수로 변경, 두개의 배열의 값중 하나라도 1이 있으면# 둘다 영이면 공백 출력 요것만 기억하면 될것 같다.
나의 해답.
class Solution { private int[] parseBinaryNumber(int length, int number) { int[] intArr = new int[length]; int mok = number; length -= 1; if(number == 0) { return intArr; } while(mok != 1) { intArr[length] = (mok%2); mok = mok/2; length-=1; } if(mok == 1) { intArr[length] = mok; } return intArr; } public String[] solution(int n, int[] arr1, int[] arr2) { String[] answer = {}; answer = new String[n]; for (int i = 0; i < n; i++) { int arr1Number = arr1[i]; // 9 int arr2Number = arr2[i]; // 30 int[] arr1Char = parseBinaryNumber(n, arr1Number); int[] arr2Char = parseBinaryNumber(n, arr2Number); StringBuilder tempSb = new StringBuilder(); for (int j = 0; j < n; j++) { if (arr1Char[j] == 0 && arr2Char[j] == 0) { tempSb.append(" "); }else { tempSb.append("#"); } } answer[i] = tempSb.toString(); } return answer; } }
처음에 받는수가 0인 경우를 고려하지 않아서 문제 제출할때 1번이랑 몇번이 실패가 떴는데 0일때 처리를 해주고 나니 해결이 됐다.
> 다른사람 풀이를 보며 Integer.toBinaryString() 함수를 알게 되었는데 이걸 썼으면 또 다른 함수를 만들지 않아도 됐을것 같다.
# 재귀함수 이용한 다른사람 풀이.
public String makeSharp(int n, int m) { if(n == 0) { if(m > 0) { String str = ""; for(int i=0; i<m; i++) { str += " "; } return str; }else return ""; }else { return n % 2 == 0 ? makeSharp(n/2, m-1) + " " : makeSharp(n/2, m-1) + "#"; } } public String[] solution(int n, int[] arr1, int[] arr2) { String[] answer = new String[n]; int[] secretMap = new int[n]; for(int i=0; i<n; i++) { secretMap[i] = arr1[i] | arr2[i]; answer[i] = makeSharp(secretMap[i], n); } return answer; }
마지막으로 다른사람 풀이에 있는 비트 연산자를 이용하면 문제를 더 쉽게 풀수 있을듯