-
[프로그래머스 Lv.1] 비밀지도 javaDEV/알고리즘 2020. 11. 27. 14:15
문제설명
programmers.co.kr/learn/courses/30/lessons/17681
입출력 예제
매개변수 값 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
123456789101112131415161718192021222324class 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타입으로 바꿔주어 해결!
다른사람풀이
1234567891011121314151617class 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은 생각이 안났었는데 좋은 방법인듯
반복문 한번으로 해결되니까 :)
'DEV > 알고리즘' 카테고리의 다른 글
[프로그래머스 Lv.1] 실패율 java (0) 2020.11.30 [프로그래머스 Lv.1] 예산 java (0) 2020.11.24 [프로그래머스 Lv.1] 키패드 누르기 java (0) 2020.11.19 [프로그래머스 Lv.1] 크레인 인형뽑기 java (0) 2020.11.10 [프로그래머스 Lv.2] 카펫 java (0) 2020.11.03