[프로그래머스] 17681. 비밀지도
문제 링크
풀이 과정
두 지도를 겹쳐 새로운 지도를 만드는데, 각 지역이 두 지도 중 하나라도 벽이면 벽을, 둘 다 공백이면 공백을 나타낸다는 점에서 OR 연산임을 알았습니다. toBinaryString 메소드를 통해 숫자를 2진수로 변환했고, 각각 0과 1을 공백(‘ ‘)과 벽(‘#’)으로 변경했습니다. 변환된 2진수가 n자리가 안될 수 있으므로 자리 맞춤을 위해 앞에 0을 넣어 줬습니다.
또한, String 클래스의 format 메소드를 통해 부족한 자리는 공백으로 채워넣을 수 있다는 점을 알 수 있었습니다. 시간은 while 문을 활용한 쪽이 훨씬 빨랐습니다.
answer[i] = String.format("%" + n + "s", answer[i]);
while 문을 통해 자리가 맞을 때까지 앞에 공백을 추가한 코드
String.format 을 사용해 n 자리수에 맞게 앞에 공백을 추가한 코드
코드
public class Main {
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[arr1.length];
for (int i = 0; i < arr1.length; i++) {
int num = arr1[i] | arr2[i];
answer[i] = Integer.toBinaryString(num);
answer[i] = answer[i].replace("1", "#");
answer[i] = answer[i].replace("0", " ");
while (answer[i].length() != n)
answer[i] = " " + answer[i];
}
for (String s : answer)
System.out.println(s);
return answer;
}
public static void main(String[] args) {
// int n = 5;
// int[] arr1 = {9, 20, 28, 18, 11};
// int[] arr2 = {30, 1, 21, 17, 28};
int n = 6;
int[] arr1 = {46, 33, 33, 22, 31, 50};
int[] arr2 = {27, 56, 19, 14, 14, 10};
solution(n, arr1, arr2);
}
}
댓글남기기