문제: https://school.programmers.co.kr/learn/courses/30/lessons/17681
1. 코드
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i = 0; i < n; i++) {
String s1 = Integer.toBinaryString(arr1[i]);
String s2 = Integer.toBinaryString(arr2[i]);
String zero = "0";
if(s1.length() < n)
s1 = zero.repeat(n - s1.length()) + s1;
if(s2.length() < n)
s2 = zero.repeat(n - s2.length()) + s2;
answer[i] = "";
for(int j = 0; j < n; j++) {
if(s1.charAt(j) == '1' || s2.charAt(j) == '1')
answer[i] += "#";
else
answer[i] += " ";
}
}
return answer;
}
}
2. 설명
문제의 길이 수가 길어서 어려워 보이지만 해결 방법은 간단한 문제입니다.
String[] answer = new String[n];
for(int i = 0; i < n; i++) {
String s1 = Integer.toBinaryString(arr1[i]);
String s2 = Integer.toBinaryString(arr2[i]);
String zero = "0";
if(s1.length() < n)
s1 = zero.repeat(n - s1.length()) + s1;
if(s2.length() < n)
s2 = zero.repeat(n - s2.length()) + s2;
각 배열에 저장된 값을 Integer.toBinaryString() 메서드를 통해서 10진수의 값을 2진수로 변환하는데 변환된 값의 길이가 n보다 작을 수 있기에 작은 경우에는 n만큼의 길이가 될 정도로 0을 앞에 채워줍니다.
answer[i] = "";
for(int j = 0; j < n; j++) {
if(s1.charAt(j) == '1' || s2.charAt(j) == '1')
answer[i] += "#";
else
answer[i] += " ";
}
}
String 배열을 초기화하지 않으면 null값이 자동으로 저장되기에 공백으로 초기화를 해준 뒤 n만큼의 길이로 이루어진 2진수 값에 따라 answer[i]에 1일 경우 벽("#")을 0일 경우에는 공백(" ")을 저장해 한다면 문제는 해결된다.
3. 정리
- arr1과 arr2에 저장된 10진수를 n만큼 길이로 2진수 문자열로 변환
- 변환된 문자열의 문자가 1일 경우 벽("#")을 0일 경우 공백(" ")을 문자열로 채워 넣는다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 134240번: 푸드 파이트 대회 [Java] (0) | 2023.07.19 |
---|---|
프로그래머스 - 68644번: 두 개 뽑아서 더하기 [Java] (0) | 2023.07.18 |
프로그래머스 - 12915번: 문자열 내 마음대로 정렬하기 [Java] (0) | 2023.07.17 |
프로그래머스 - 81301번: 숫자 문자열과 영단어 [Java] (0) | 2023.07.16 |
프로그래머스 - 12981번: 영어 끝말잇기 [Java] (0) | 2023.07.14 |