🔗 문제 링크
[프로그래머스] 비밀지도 / 2018 KAKAO BLIND RECRUITMENT(1차)
📝 풀이 과정
지도 두 장을 겹쳐 둘 중 하나라도 벽('1')일 경우 결과 값에 벽('1')이 나오는 것을 보고 OR연산이 떠올랐다.
1010 | 1100 = 1110
Integer.toBinaryString(arr1[i] | arr2[i]).replace('1', '#').replace('0', ' ')
입력은 정수 배열의 형태로 들어오기 때문에 하나씩 OR(|)연산을 통해 결과 지도의 값을 만들어 준다.
Java에는 Integer.toBinaryString()
이라는 함수가 존재하는데, 이를 사용하면 쉽게 10진수의 숫자를 2진수 형태의 String으로 변경시켜준다.
이후, String.replace()
를 사용해 1 → '#'
으로, 0 → ' '
으로 출력 값에 맞게 변경시켜준다.
아직 문제가 존재하는데, OR연산의 결과의 앞자리 숫자가 0일 경우다. 만약 n = 5에서 OR연산을 통해 나온 값이 1010이고, replace해준다면 '#_#_'이 된다. 이 경우에는 결과값으로 원하는 '_#_#_'과 불일치하게 되는데 해당 문제를 String.format()
으로 해결할 수 있다.
String.format()
으로 String에 강제적으로 길이에 맞는 공백을 앞에 넣어줌으로써 해결할 수 있게 된다.%[num]s
는 String의 길이가 num보다 부족할 경우 앞을 공백으로 채워 길이를 num까지 늘리게 해준다.
💻 코드
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] ans = new String[n];
for (int i = 0; i < n; i++)
ans[i] = String.format("%" + n + "s", Integer.toBinaryString(arr1[i] | arr2[i]))
.replace('1', '#').replace('0', ' ');
return ans;
}
}
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 - JAVA (1) | 2021.01.03 |
---|---|
[프로그래머스] 베스트앨범 - JAVA (0) | 2021.01.02 |
[프로그래머스] 전화번호 목록 - JAVA (0) | 2021.01.01 |
[프로그래머스] 다트 게임 / 2018 KAKAO BLIND RECRUITMENT(1차) - JAVA (0) | 2020.12.31 |
[프로그래머스] 주식가격(Stack) - JAVA (3) | 2020.12.13 |