본문 바로가기
프로그래머스/[프로그래머스 - JAVA] Lv.1

[프로그래머스 - JAVA] [1차] 비밀지도 - 17년도 카카오 1차 코딩테스트

by 코딩하는 흰둥이 2023. 4. 3.
반응형

 


class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = {};
        // 한변의 길이가 지정되어 있기 때문에 n만큼 초기화
        answer = new String[n];

        for (int i = 0; i < n; i++) {
        // 비트연산자로 변경
            String binary1 = Long.toBinaryString(arr1[i]);
            String binary2 = Long.toBinaryString(arr2[i]);

		// 비트연산자 값을 숫자로 변환해서 합치고 다시 문자열로 변경
            String sum = String.valueOf(Long.parseLong(binary1) + Long.parseLong(binary2));
		// n의 길이로 맞춰야하기 때문에 합친 비트연산자 값의 크기를 비교 후 문자열 반복 
            sum = "0".repeat(n - sum.length()) + sum;

            String[] change = String.valueOf(sum).split("");
            String str = "";
            for (int j = 0; j < n; j++) {
            // 비트연산자는 0,1로만 되어 있는데 숫자를 합쳤기 때문에 2까지 있음
                if (change[j].equals("1") || change[j].equals("2")){
                    str += "#";
                }else {
                    str += " ";
                }
            }
            answer[i] = str;
        }
        
        return answer;
    }
}

비트연산자를 사용해 본 적도 없는데

17년도 카카오 신입 공채 1차 코딩테스트라길래 비트연산자 변형 방법만 찾아서 풀어본다 -_-

 

 

  • 다른 사람 풀이
class Solution {
  public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] result = new String[n];
        for (int i = 0; i < n; i++) {
            result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
        }

        for (int i = 0; i < n; i++) {
            result[i] = String.format("%" + n + "s", result[i]);
            result[i] = result[i].replaceAll("1", "#");
            result[i] = result[i].replaceAll("0", " ");
        }

        return result;
    }
}

다른 분들 풀이를 보니 다들 replaceAll을 사용했던데 생각이 안나서 for문을 한번 더 돌렸다

댓글