https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
문제 풀이 (JAVA)
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for (int i = 0; i < n; i++) {
answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]); // 비트연산자 '|' 는 OR로 두 숫자를 연산하여 이진수 문자열로 저장한다.
answer[i] = answer[i].replace('0', ' '); // 이진문자열 0을 공백문자 스페이스로 치환한다.
answer[i] = answer[i].replace('1', '#'); // 이진문자열 1을 #으로 치환한다.
while(answer[i].length() < n) { // 문자열의 길이가 정사각형 길이 n보다 작다면
answer[i] = ' ' + answer[i]; // 문자열의 길이가 같아질때까지 공백 추가
}
}
return answer;
}
}
주요 핵심 포인트
1. 비트연산자 OR 를 사용하여 이진문자열로 저장하였다.
2. 문자열의 길이가 N보다 작은 이유는 5의 경우 이진숫자열 101로 저장되기 때문에, N이 5라면 00101로 저장하여야 되기 때문에 문자열의 길이가 같아질때까지 왼쪽에 공백을 추가하여 저장하여야 오류가 발생하지 않는다.
리뷰
: toBinaryString을 사용하여 이진문자열로 저장할수 있다는 것을 알았고, 비트연산자를 통해 손쉽게 이진수를 비교하는 방법을 알았다. 이진문자열이 공백을 채워주지 않기 때문에 반복문을 사용해 n개만큼의 공백을 채워줘야 한다는 것을 뒤늦게야 깨달았다. 앞으로 더 노력하자.
'프로그래머스(JAVA)' 카테고리의 다른 글
나머지가 1이 되는 수 찾기 (0) | 2022.04.24 |
---|---|
부족한 금액 계산하기 (0) | 2022.04.24 |
가운데 글자 가져오기 (0) | 2022.04.24 |
[1차]다트 게임 (0) | 2022.04.24 |
같은 숫자는 싫어 (0) | 2022.04.24 |