공부하는 스누피
[JAVA] 비밀지도 - StringBuffer 본문
https://programmers.co.kr/learn/courses/30/lessons/17681#
생각과정
- 각 지도 배열에서 같은 인덱스의 정수를 이진수 문자열로 변환한다.
- 둘 중 하나라도 1이 있다면 #를 추가한다. (OR 연산으로 풀 수 있음)
구현
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String format = "%"+ Integer.toString(n) +"s";
for(int i=0;i<n;i++){
//이진수 변환
String map1 = String.format(format,Integer.toBinaryString(arr1[i]));
String map2 = String.format(format,Integer.toBinaryString(arr2[i]));
StringBuffer str = new StringBuffer();
for(int j=0;j<n;j++){
//둘 중 하나라도 벽이 있으면 벽 표기
if(map1.charAt(j) == '1' || map2.charAt(j) == '1'){
str.append('#');
}else{
str.append(' ');
}
}
answer[i] = str.toString();
}
return answer;
}
}
결과
다른 풀이 방법
1. Integer.toBinaryString() 호출할때 넘겨주는 정수값을 지도1과 지도2의 값을 비트 연산한 것으로 한다.
String map = String.format(format, Integer.toBinaryString(arr1[i] | arr2[i]));
2. Format을 "%0" + n + "d"로 하고, toBinaryString을 정수로 바꿔줘서 format 메소드에 넘겨준다.
=> %05d는 입력값이 9일때 01001로 print
=> Test case 2, 6을 통과하지 못했다.
Integer.toBinaryString(int)
정수를 binary 문자열로 만들어 준다.
String.format(format, String)
문자열을 형식에 맞게 변환해준다. Format은 printf 메소드에서 사용하는 것과 동일하다.
StringBuffer
- 추가
buffer.append(String or Character) //버퍼 맨 끝에 추가
buffer.insert(index, String) //인덱스에 추가
- String으로 변환
buffer.toString()
- 다른 메소드 substirng 등은 String 클래스와 동일함
'Algorithms > 코딩테스트 문제풀이' 카테고리의 다른 글
[JAVA] 연산자 끼워넣기 - DFS (0) | 2020.07.23 |
---|---|
[JAVA] 로봇 청소기 - Simulation (0) | 2020.07.22 |
[JAVA] 캐시 - LinkedList (0) | 2020.07.17 |
[JAVA] 프렌즈4블록 - String (0) | 2020.07.16 |
[JAVA] 뉴스 클러스터링 - HashMap (1) | 2020.07.15 |
Comments