728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/17681
⭐️ 코드
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i = 0; i < n; i++) {
// Integer.toBinaryString() : 이진수로 바꿔줌
String binaryNum1 = Integer.toBinaryString(arr1[i]);
String binaryNum2 = Integer.toBinaryString(arr2[i]);
// 숫자의 길이 맞추기 위해 0 삽입
String[] binaryNum1Arr = insertZero(binaryNum1, n);
String[] binaryNum2Arr = insertZero(binaryNum2, n);
// 한 행씩 비밀지도 맞추기
StringBuilder sb = new StringBuilder();
for(int j= 0; j<n; j++) {
if(binaryNum1Arr[j].equals("1") || binaryNum2Arr[j].equals("1")) {
sb.append("#");
} else {
sb.append(" ");
}
}
// 완성 행 answer배열 삽입
answer[i] = sb.toString();
}
return answer;
}
private String[] insertZero(String binaryNum, int n) {
if(binaryNum.length() != n) {
String zero = "";
for(int j = 0; j<n-binaryNum.length(); j++) {
zero += "0";
}
binaryNum = zero + binaryNum;
}
return binaryNum.split("");
}
}
💡 문제 풀이
음 생각보다 어렵진 않은 문제다. 아래의 함수만 알면 쉽게 풀 수 있다.
Integer.toBinaryString(arr);
물론 프로그래머스 3진법 뒤집기 문제에서 했던 것처럼 Integer.parseInt(arr, 2)라는 2진수 변환 함수를 써서 몇 가지 변환 과정을 거치면 풀 수 있지만 위 함수를 이용하면 조금 더 코드를 간결하게 짤 수 있다.
이 문제에서 가장 중요한건 숫자를 이진수로 바꾸는 것 도 있지만 숫자의 길이를 맞추는 것도 중요하다.
우리의 결과는 아래와 같은 표를 만들어야 하기 때문이다.
private String[] insertZero(String binaryNum, int n) {
if(binaryNum.length() != n) {
String zero = "";
for(int j = 0; j<n-binaryNum.length(); j++) {
zero += "0";
}
binaryNum = zero + binaryNum;
}
return binaryNum.split("");
}
이진수로 변환한 문자열을 받아 길이를 5(n) 만큼 맞춰줄 수 있도록 앞에 0을 삽입하는 형식의 함수를 만들었다. 마지막 return 값은 우리가 두 수를 비교하기 편하게 배열 형태로 반환할 수 있도록 해줬다.
변환하여 출력 한 결과는 위와 동일하다.
// 한 행씩 비밀지도 맞추기
StringBuilder sb = new StringBuilder();
for(int j= 0; j<n; j++) {
if(binaryNum1Arr[j].equals("1") || binaryNum2Arr[j].equals("1")) {
sb.append("#");
} else {
sb.append(" ");
}
}
// 완성 행 answer배열 삽입
answer[i] = sb.toString();
마지막 포문을 통해 하나씩 맞는지 검사하고 비밀지도 한 행을 완성시켜 answer [ ]에 넣어주면 끝난다!!
👀 후기
Integer.toBinaryString(int);
위 코드를 알면 정말 간편해 지기 때문에 앞으로 이진수 변환에는 꼭 써먹어야겠다 ㅎㅎ
728x90
반응형
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스/Programmers] [1차] 캐시 (Java - LRU - Level2) (0) | 2023.01.13 |
---|---|
[프로그래머스/Programmers] 줄 서는 방법 (Java - Level2) (0) | 2023.01.11 |
[프로그래머스/Programmers] 예산 (Java - 알고리즘) (0) | 2023.01.04 |
[프로그래머스/Programmers] 최대공약수와 최소공배수 (Java - 수학) (0) | 2023.01.03 |
[프로그래머스/Programmers] 문자열 다루기 기본 (Java - 문자열) (2) | 2023.01.02 |