본문 바로가기
Algorithm/PROGRAMMERS[Java]

Lv1. 비밀지도[카카오]

by 씨니 2022. 4. 17.
728x90

▶ 문제

 

▶ 풀이방법

- 첫번째 풀이(2번째 케이스에서 오답 발생)

import java.util.*;
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        String[] arr = new String[n];
        for(int i = 0; i < n; i++){ //두개의 지도 붙였을 때 OR값
            arr[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
        }
     
        Arrays.fill(answer, "");
        for(int j = 0; j < n; j++){
            for(int i = 0; i < arr[j].length(); i++){
                char c = arr[j].charAt(i);
                if(c == '1') answer[j] += "#";
                else if(c == '0') answer[j] += " ";
            }
        }
        System.out.println(Arrays.toString(answer));
        return answer;
    }
}

 --> 겹친 지도의 결과 값이 전부 출력이 되야하기 때문에 지도 행의 길이는 n이여야함.

 --> 나의 결과 값은 n(입력값, 지도 한변의 길이)는 6임에도 불구하고 5행만 출력됨. -> 나머지는 공백으로 채워야함

 

--> 공백자리 0으로 채워주려고 했는데 시간초과 계속 발생해서 다른사람이 푼 것 참고. (2중for문 사용하면 안될듯함.)

 

- 두번째 풀이

import java.util.*;
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]); //arr1과 arr2의 2진수값 계산 후 저장
            answer[i] = String.format("%"+n+"s", answer[i]); //answer[i]길이 n으로 다 맞춰줌.
            
            answer[i] = answer[i].replaceAll("1", "#"); //1은 #으로 대체
            answer[i] = answer[i].replaceAll("0", " "); //0은 공백으로 대체
        }
        return answer;
    }
}

++너무 간단하다,,, 언제쯤 이렇게 간단하게 풀수 있을까..!!ㅜㅜ

 

▶ 문제를 풀면서 알게 된것.

- 10진수 정수를 2진수 string형태로 변환 : Integer.toBinaryString(10진수 정수 값);

- 문자열 형식 설정 : String.format();

- 문자열내 문자 대체 : 문자열 이름.replaceAll("대체 하고 싶은 문자", "대체할 문자");

728x90

'Algorithm > PROGRAMMERS[Java]' 카테고리의 다른 글

Lv1. 나머지가 1이 되는 수 찾기  (0) 2022.04.17
Lv1. 부족한 금액 계산하기  (0) 2022.04.17
Lv1. 가운데 글자 가져오기  (0) 2022.04.17
Lv1. 다트게임[카카오]  (0) 2022.04.17
Lv1. 같은 숫자는 싫어  (0) 2022.04.17