리뷰
소요시간: 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;
}
}