티스토리 뷰

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/17681

 

프로그래머스

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

programmers.co.kr

 

2018 KAKAO BLIND RECRUITMENT 1차 Level 1 문제다.

 

 

 

< 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. >

 

라는 문제 조건을 보면 바로 비트 연산 중 OR 연산을 떠올릴 수 있다.

arr1[]과 arr2[]를 비트 연산 후 toBinaryString에 넣어 이진수 형태의 문자열로 변환한다.그리고 StringBuilder에 0이면 공백, 1이면 #을 추가해준다.완성된 StringBuilder를 ans[]에 넣으면 된다.이 때 2진수 문자열로 변환시 앞자리가 0인 경우 0으로 표시되지 않고 생략되므로 n자리의 문자열이 생성되지 않을 수 있다. (ex: 011110 인 경우 11110이 됨)그리고 StringBuilder에 (n - 2진수 문자열의 length)만큼 공백을 추가하여 무조건 6자리의 문자열이 ans에 들어가도록 해준다.

 

class Solution {
	public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] ans = new String[n];
        StringBuilder sb = new StringBuilder();
        
        for(int i=0;i<n;i++) {
            String temp = Integer.toBinaryString(arr1[i] | arr2[i]);
            
            sb.append(" ".repeat(n - temp.length()));
            for(char c : temp.toCharArray())
                if(c == '0')
                    sb.append(' ');
                else
                    sb.append('#');
            ans[i] = sb.toString();
            sb.setLength(0);
        }
        
        return ans;
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함