https://programmers.co.kr/learn/courses/30/lessons/17681
입력형식
입력으로 지도의 한 변 크기 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;
}
}
'algorithm' 카테고리의 다른 글
[프로그래머스]멀쩡한 사각형 (0) | 2020.03.01 |
---|---|
[프로그래머스]기능개발 (0) | 2020.01.12 |
[프로그래머스]위장 (0) | 2020.01.08 |
[프로그래머스]프린터 (0) | 2020.01.02 |
[프로그래머스][1차]다트게임 (0) | 2019.12.22 |