처음 공부시작했을때 처음풀어보는 1단계 문제였다. 그 때 몇시간 동안이나 고민하다가 풀었던 기억이 있다.
그로부터 5달이 지난 지금 다시 풀어볼까하고 풀어보았다.
문제를 보면 일단 10진수를 2진수로 바꿔야한다. 예전에는 일일이 나누어서 했지만, 검색해보니 Integer 클래스의 함수를 사용하면 쉽게 변환이 가능하다고 한다.
Integer 클래스의 toBinaryString 함수를 사용하면 된다.
예를들어,
int i = 127;
String toTwo = Integer.toBinaryString(i);
System.out.println(toTwo); ///1111111
문제와는 상관없지만 2진수를 10진수로 변환하는 방법도 있다. Integer 클래스의 parseInt를 사용하여 쉽게 변환 가능하다.
int i = 127;
String toTwo = Integer.toBinaryString(i);
System.out.println(toTwo); ///1111111
int toTen = Integer.parseInt(binaryString, 2);
System.out.println(toTen); //127
그럼 이걸 이용해보자.
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i =0;i<n;i++){
String sharp = Integer.toBinaryString(arr1[i] | arr2[i]);
sharp = String.format("%"+n+"s",sharp);
sharp = sharp.replaceAll("1" , "#");
sharp = sharp.replaceAll("0" , " ");
answer[i] = sharp;
}
return answer;
}
}
으로 만들 수 있다.
풀이를 해보자면arr1[i] | arr2[i]
이건 둘중 하나라도 1이면 1을 반환하는 것을 의미한다.
그리고
sharp = String.format("%"+n+"s",sharp);
sharp = sharp.replaceAll("1" , "#");
sharp = sharp.replaceAll("0" , " ");
"%"+n+"s": 포맷 문자열로 %와 s를 사용한다. %는 포맷 지정자를 나타내며, s는 문자열을 의미나타낸다. n은 주어진 길이를 나타내는 변수이다.
따라서 n의 길이로 지정을 하고 만약 n의 길이보다 sharp의 길이가 작다면 문자열 왼쪽에 공백을 추가하여 전체길이가 n이 되도록 맞춘다.
그리고 이제 "1" 은 #으로 바꾸고 "0"은 " " 으로 바꾸고 하는 방식이다.
이 문제는 예전에 풀었던 문제이지만 아직 바로바로 풀리지가 않는다.
저번에는 이중포문으로 풀었던 것 같지만 이번에 푼 방식은 조금 더 효율적인 것 같다.
역시 코테는 꾸준히 풀어야지 실력이 잘 느는것 같다..
'Algorithm > Algorithm 문제' 카테고리의 다른 글
[백준] 3273 두 수의 합 [Java] (0) | 2023.05.24 |
---|---|
[백준] 1919 애너그램 만들기 [Java] (0) | 2023.05.20 |
[백준] 10989 수 정렬하기 3 [Java] (0) | 2023.02.21 |
[백준] 2751 수 정렬하기 2[Java] (0) | 2023.02.21 |
[프로그래머스] 제곱수 판별하기 [Java] (0) | 2022.11.18 |