-
프로그래머스 - 비밀지도알고리즘 2024. 4. 12. 18:18
class Solution { public String[] solution(int n, int[] arr1, int[] arr2) { String[] answer = new String[n]; String[] binary1 = new String[n]; String[] binary2 = new String[n]; for(int i = 0; i < n; i++) binary1[i] = Integer.toString(arr1[i], 2); for(int i = 0; i < n; i++) binary2[i] = Integer.toString(arr2[i], 2); for(int i = 0; i < n; i++) { StringBuilder sb = new StringBuilder(); // ex) 9 = 1001 이므로 앞에 빈 0 채워주기 if(binary1[i].length() < n) binary1[i] = plusZero(binary1[i], n); if(binary2[i].length() < n) binary2[i] = plusZero(binary2[i], n); System.out.println(binary1[i]); for(int j = 0; j < n; j++) { if(binary1[i].charAt(j) == '1' || binary2[i].charAt(j) == '1') sb.append('#'); else sb.append(' '); } answer[i] = sb.toString(); } return answer; } public String plusZero(String binary, int n) { StringBuilder sb = new StringBuilder(); for(int i = 0; i < n - binary.length(); i++) sb.append("0"); sb.append(binary); return sb.toString(); } }
입력받은 숫자를 2진수로 변환하여, 1이면 # 0이면 공백으로 채운 두 문자열을 비교하여 둘 중 하나라도 #이 있다면 # 을 넣은 문자열 배열을 반환하는 문제였습니다.
코드가 깔끔하지 않지만,,, 먼저 입력받은 숫자를 2진수로 변환합니다. 이 때 문제가 발생하게 되는데
입력 예시처럼 n은 5일 때 입력받은 숫자가 9라면 2진수로 변환시 01001이 아닌 1001로 변환됩니다.이를 해결하기 위해 메소드를 정의하여, n보다 변환한 숫자의 길이가 작을 때 앞에 0을 더하도록 만들었습니다.
이후에 각 2진수에서 1 이 있는지 비교하여 답을 반환했습니다.
'알고리즘' 카테고리의 다른 글
프로그래머스 - 푸드 파이트 대회 (0) 2024.04.13 프로그래머스 - 두 개 뽑아서 더하기 (0) 2024.04.13 프로그래머스 - 문자열 내 마음대로 정렬하기 (0) 2024.04.12 프로그래머스 - 가장 가까운 같은 글자 (0) 2024.04.12 프로그래머스 - 최소 직사각형 (0) 2024.04.12