ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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;
    	}

    마지막으로 다른사람 풀이에 있는 비트 연산자를 이용하면 문제를 더 쉽게 풀수 있을듯

     

    '알고리즘 > 프로그래머스' 카테고리의 다른 글

    예산  (0) 2020.09.07
    체육복 - 탐욕법  (0) 2020.08.20
    시저암호  (0) 2020.08.12
    완주하지 못한 선수 - Hash  (0) 2020.08.11
    같은 숫자는 싫어  (0) 2020.08.02
Designed by Tistory.