컴퓨터 프로그래밍/알고리즘
프로그래머스_비밀지도
깝돌이
2020. 5. 25. 14:04
https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
1. arr1에 각 요소를 2진법의 숫자 배열을 가지는 2차원 배열을 만들어야합니다. int[arr1.length][n]
2. 2차원 배열을 만들게 되면 int형이므로 초기값이 0을 되어있습니다.
3. 요소를 2로 나누어서 첫번째 나머지는 배열의 마지막에 넣습니다.
4. while문을 써서 몫이 0일때 까지 연산을 해서 배열의 뒤에서부터 넣어줍니다.
5. 이차원 배열을 다 채웁니다.
6. 마찬가지로 arr2에 대한 이차원 배열도 만듭니다.
7. arr1의 이차원 배열과 arr2의 이차원 배열의 각 요소를 if문을 써서 하나라도 1이 있으면 #을 리턴하고, 둘다 0이면 공백을 리턴합니다.
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
int[][] arr1List = new int[arr1.length][n];
int[][] arr2List = new int[arr2.length][n];
for (int i = 0; i < arr1.length; i++) {
int k1 = arr1[i];
int j1 = n - 1;
while (k1 != 0) {
arr1List[i][j1] = k1 % 2;
k1 =k1/2;
j1--;
}
int k2 = arr2[i];
int j2 = n - 1;
while (k2 != 0) {
arr2List[i][j2] = k2 % 2;
k2 =k2/2;
j2--;
}
answer[i]="";
for (int t = 0; t < n; t++) {
if (arr1List[i][t] == 1 || arr2List[i][t] == 1) {
answer[i]+="#";
}else {
answer[i]+=" ";
}
}
}
return answer;
}
<남풀이>
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;
}
}