DEV/알고리즘
[프로그래머스 Lv.1] 비밀지도 java
Imvory
2020. 11. 27. 14:15
문제설명
programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
입출력 예제
매개변수 | 값 |
n | 5 |
arr1 | [9, 20, 28, 18, 11] |
arr2 | [30, 1, 21, 17, 28] |
출력 | ["#####","# # #", "### #", "# ##", "#####"] |
매개변수 | 값 |
n | 6 |
arr1 | [46, 33, 33 ,22, 31, 50] |
arr2 | [27 ,56, 19, 14, 14, 10] |
출력 | ["######", "### #", "## ##", " #### ", " #####", "### # "] |
Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String[] map = new String[n];
for(int i=0; i<n; i++) {
map[i] = String.format("%0"+n+"d", Long.parseLong(Integer.toBinaryString(arr1[i]|arr2[i])));
}
for(int i=0; i<map.length; i++) {
String m = map[i];
String str = "";
for(int j=0; j<m.length(); j++) {
if(m.charAt(j)=='1') {
str += "#";
}else {
str += " ";
}
}
answer[i] = str;
}
return answer;
}
}
|
cs |
1. 두 배열을 OR연산하여 map에 담아주고
2. map에 있는 문자를 쪼개서 1이면 "#" 0이면 공백을 주어 String에 더해서 answer배열에 담았다.
처음엔
map[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
이렇게 했더니 2진수변환할때 앞이 0이면 0을 빼고 출력해서 원하는 답이 나오지 않았다.
그래서 String.format을 이용하는 방법을 찾았다
map[i] = String.format("%0"+n+"d", Integer.parseInt(Integer.toBinaryString(arr1[i]|arr2[i])));
% : 명령 시작 의미
0 : 채워질 문자
n : 총 자릿수
d : 정수
하지만 2,6번에서 런타임에러가 났는데 int형 범위를 초과하여 난 에러였다.
map[i] = String.format("%0"+n+"d", Long.parseLong(Integer.toBinaryString(arr1[i]|arr2[i])));
그래서 Long타입으로 바꿔주어 해결!
다른사람풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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;
}
}
|
cs |
같은 방법을 좀 더 깔끔하게 한 느낌
특히 replaceAll은 생각이 안났었는데 좋은 방법인듯
반복문 한번으로 해결되니까 :)