카테고리 없음

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

제이G 2023. 4. 15. 12:36

리뷰

소요시간: 1시간

오래걸린이유: 문제에 대한 설계는 끝냈지만, 10진수 → 2진수 변환을 몰라서 못푼 문제.

Integer.toString() 메소드나 Integer.toBianryString() 메소드 등 기본 메소드 숙지할 것.

 

 

 

문제 풀이

제한

  • 지도 한 변 크기 n: 1 ~ 16
  • 각 원소 x를 이진수로 변환 시, 길이는 n 이하. 0 ~ 2^n-1

 

 

유형

Goal: 비밀지도의 암호를 해독하기

→ 구현문제

 

 

설계

1. 보드만들기

  • int[] arr1, int[] arr2 정보를 바탕으로 10진수 → 2진수 변환
  • [row][col]이 하나라도 1이면 board[row][col]에 '#', 아니면 ' '

 

 

구현

import java.io.*;
import java.util.*;

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        return pro(n, arr1, arr2);
    }
    
    private String[] pro(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        //1. 보드만들기
        char[][] board = makeBoard(n, arr1, arr2);
        //2. 보드를 순회하며 "#", " "꼴로 치환하기
        for(int row=0; row<board.length; row++) {
            StringBuilder sb = new StringBuilder();
            for(int col=0; col<board[row].length; col++) {
                sb.append(board[row][col]);
            }
            answer[row] = sb.toString();
        }
        return answer;
    }
    
    // 보드 만들기
    private char[][] makeBoard(int n, int[] arr1, int[] arr2) {
        char[][] board = new char[n][n];
        // arr1, arr2 -> 이진수변환
        for(int row=0; row<n; row++) {
            String binaryStringOne = getBinaryString(arr1[row], n);
            String binaryStringTwo = getBinaryString(arr2[row], n);
            for(int col=0; col<n; col++) {
                char c1 = binaryStringOne.charAt(col);
                char c2 = binaryStringTwo.charAt(col);
                if(c1=='1' || c2=='1') {
                    board[row][col] = '#';
                } else {
                    board[row][col] = ' ';
                }
            }
        }
        return board;
    }
    
    // 2진수 변환
    private String getBinaryString(int s, int n) {
        String binaryString = Integer.toBinaryString(s);
        int zeroCount = n - binaryString.length();
        String temp = "";
        while(zeroCount --> 0) {
            temp += "0";
        }
        binaryString = temp + binaryString;
        return binaryString;
    }
}