[프로그래머스][1차]비밀지도
https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 공백(" ) 또는벽(#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 지도 1과 지도 2라고 하자. 지도 1
programmers.co.kr
입력형식
입력으로 지도의 한 변 크기 n과 2개의 정수 배열 arr1, arr2가 들어온다..
- 1 <= n <= 16
- arr1, arr2는 길이 n인 정수 배열로 주어진다.
- 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 <= x <= 2^(n-1)을 만족한다.
출력형식
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
풀이
arr1, arr2 배열에 있는 십 진수 값을 temp1, temp2에 대입하고 s1, s2에 2진수로 바꿔서 문자열로 대입한다.
그리고 result 값에 s1, s2 값을 비교하여 하나의 2진수 값을 만들어 준다.
for (int j = n - 1; j >= 0 ; j--) {
s1 += (temp1 % 2);
temp1 /= 2;
s2 += temp2 % 2;
temp2 /= 2;
if (s1.equals("1") || s2.equals("1"))
result += "1";
else
result += "0";
s1 = "";
s2 = "";
}
result 값을 char 형으로 변경하여, 1일때는 '#', 0일 때는 ' '(공백)을 ginRes에 넣어준다.
result 값은 결과 값이 반대로 대입되어져 있기 때문에 (int k = n - 1; k >= 0; k--) 조건을 주어 뒤에서 부터 값을
비교한다.
for (int k = n - 1; k >= 0; k--) {
if (result.charAt(k) == '1')
ginRes += "#";
else
ginRes += " ";
}
마지막으로 그 값을 answer[i] = ginRes에 대입해준다.
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String s1 = "" , s2 = "", result = "", ginRes= "";
int temp1 = 0, temp2 = 0;
for (int i = 0; i < n; i++) {
temp1 = arr1[i];
temp2 = arr2[i];
for (int j = n - 1; j >= 0 ; j--) {
s1 += (temp1 % 2);
temp1 /= 2;
s2 += temp2 % 2;
temp2 /= 2;
if (s1.equals("1") || s2.equals("1"))
result += "1";
else
result += "0";
s1 = "";
s2 = "";
}
for (int k = n - 1; k >= 0; k--) {
if (result.charAt(k) == '1')
ginRes += "#";
else
ginRes += " ";
}
result = "";
answer[i] = ginRes;
ginRes = "";
}
return answer;
}
}