본문 바로가기

알고리즘 문제풀이/프로그래머스 Level 1

[2018 KAKAO BLIND RECRUITMENT[1차]/Java] 비밀지도

# 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17681

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

목차

 

카카오 문제 해설    2018 카카오 신입 공채 1차 코딩 테스트 문제 해설 링크
더보기

이 문제는 비트 연산Bitwise Operation을 묻는 문제입니다.

이미 문제 예시에 2진수로 처리하는 힌트가 포함되어 있고, 둘 중 하나가 1일 경우에 벽 #이 생기기 때문에 OR로 처리하면 간단히 풀 수 있습니다.

아주 쉬운 문제였던 만큼 if else로 풀이한 분들도 많이 발견되었는데요.

정답으로는 간주되지만 이 문제는 비트 연산을 잘 다룰 수 있는지를 묻고자 하는 의도였던 만큼

앞으로 이런 유형의 문제를 풀 때는 비트 연산을 꼭 기억하시기 바랍니다.

 

이 문제의 정답률은 81.78%입니다. 첫 번째 문제이고 가장 쉬운 문제였던 만큼 많은 분들이 잘 풀어주셨습니다.

 

내 문제풀이
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        for (int i=0; i<n; i++) {
            StringBuilder sb = new StringBuilder(Integer.toBinaryString(arr1[i] | arr2[i]));
            
            while (sb.length() < n) {
                sb.insert(0, " ");
            }
            
            answer[i] = sb.toString().replace("0", " ").replace("1", "#");
        }
        
        return answer;
    }
}

왼쪽을 빈 칸으로 채우기 위한 방법으로는 내가 한 방식(n 길이만크 반복해서 앞에 " " 추가)과 더불어 아래 두 방식도 있다.

속도는

(반복문 돌면서 " " 추가) < (String.format("%16s",~) 한 후 substring()) <<<< (String.format("%" + n + "s",~))

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        for (int i=0; i<n; i++) {
            String temp = String.format("%16s", Integer.toBinaryString(arr1[i] | arr2[i]));
            temp = temp.substring(temp.length() - n);

            answer[i] = temp.replace("0", " ").replace("1", "#");
        }
        
        return answer;
    }
}

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        for (int i=0; i<n; i++) {
            String temp = String.format("%" + n + "s", Integer.toBinaryString(arr1[i] | arr2[i]));

            answer[i] = temp.replace("0", " ").replace("1", "#");
        }
        
        return answer;
    }
}