[프로그래머스] 비밀지도

JOY·2023년 4월 17일
0

[CodingTest] Java

목록 보기
26/61
post-thumbnail

😊 문제

프로그래머스 - [1차] 비밀지도

😊 코드

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        for(int i=0; i<n; i++){
            answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
        }
        
        for(int i=0; i<n; i++){
            
             while(answer[i].length() != n){
                 answer[i]  = " " + answer[i];
             }
                
            answer[i] = answer[i].replaceAll("1","#");
            answer[i] = answer[i].replaceAll("0"," ");
            
            System.out.println(answer[i]);
        }
        
        return answer;    }
}

😊 풀이

한변의 길이가 n인 정사각형배열의 형태로 각 칸은 “공백”(” “) 또는 “벽”(”#”)으로 이루어져있습니다.

지도1과 지도2를 겹쳐서 전체 지도를 얻을 수 있는데
두개의 지도를 겹쳐서 하나라도 벽(”#”)인 칸은 전체 지도에서도 벽이고
하나라도 공백(” “)인 칸은 전체 지도에서도 공백입니다.

10진수를 2진수로 변환하는 함수 - toBinaryString()
해당 함수를 이용해서 or 연산을 해주었습니다.

지도1과 지도2의 같은 칸에 해당하는 칸 중
둘 중 하나라도 1이면 1, 0이면 0 값이 초기화 되도록 값을 저장해주고
replaceAll() 함수를 이용해서 1 이면 #, 0이면 공백으로 바꾸어주었습니다.

만약 n=5이고 2진수로 변환해주었을 때 answer[i] = 1010 이라면
자릿수(n=5)가 맞지 않기 때문에 공백으로 처리해주고자
아래 코드를 넣어주어 자릿수를 맞춰주었습니다.

while(answer[i].length() != n){
answer[i]  = " " + answer[i];
}
profile
Just Do IT ------- 🏃‍♀️

0개의 댓글

관련 채용 정보