Recent Posts
소소한 개발이야기
[Programmers 문제풀이 JAVA] Level 5 비밀지도 (2017 카카오 블라인드) 본문
📄 비밀지도
🔗 문제 풀러가기
문제는 2진수의 OR연산을 이용해 해결하였습니다. 문제의 조건을 살펴보면 2개의 지도가 주어지는데 벽(#) 또는 공백으로 이루어져 있습니다. 예시에서 친절하게 2진수로 나타낼 수 있다고 알려주고 있습니다. 그렇다면 2개의 지도를 겹쳐 두 지도에서 모두 공백인 부분을 찾아내는 것이 목표인데 OR연산을 이용하면 쉽게 문제를 해결할 수 있습니다.
다만 문제의 입력이 2진수가 아닌 10진수로 주어지기 때문에 이를 2진수로 변경해야지 문제를 해결할 수 있습니다. 직접 변경해도 되지만 JAVA에서 10진수를 2진수로 변경시킬 수 있는 함수 Integer.toBinaryString을 활용해 문제를 해결할 수 있습니다.
주의사항
문제에서 주어지는 지도는 n x n 이지만 10진수를 2진수로 변경했을 때 길이가 n이 나오지 않을 때가 있습니다. 문제의 예시에서 보면 10진수 9는 2진수로 변경하면 1001(2) 가 되는데 지도의 크기만큼 2진수를 만들어야 문제를 해결할 수 있기 때문에 빈 공간에는 0을 붙여주는 예외 처리를 해줘야 합니다.
글보단 소스코드를 보면 쉽게 이해할 수 있습니다.
🌱 Solution 함수
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] decodedMap = decodeMap(n, arr1, arr2);
return decodedMap;
}
🌱 decodeMap 함수
두 지도를 입력받아 해석하는 함수입니다.
private String[] decodeMap(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for (int i = 0; i < n; i++) {
answer[i] = checkFormat(Integer.toBinaryString(arr1[i] | arr2[i]).replace("0", " ").replace("1", "#"), n);
}
return answer;
}
🌱 checkFormat 함수
2진수로 변경했을 경우 지도의 크기보다 작은지 확인해 변경해주는 함수입니다.
private String checkFormat(String binaryString, int n) {
while (binaryString.length() < n) {
binaryString = " " + binaryString;
}
return binaryString;
}
💡 Github에 더 많은 문제 풀이가 있습니다.
'Programmers' 카테고리의 다른 글
[Programmers 문제풀이 JAVA] 다트 게임 (0) | 2019.06.24 |
---|---|
[Programmers 문제풀이 JAVA] Level 2 위장 (0) | 2019.06.06 |
[Programmers 문제풀이 JAVA] Level 2 가장 큰 수 (0) | 2019.06.05 |
[Programmers 문제풀이 JAVA] Level 2 전화번호 목록 (0) | 2019.06.02 |
[Programmers 문제풀이 JAVA] Level 2 더 맵게 (0) | 2019.05.30 |
Comments