StringBuffer는 동기화 되어있어 멀티쓰레드에 안전하지만
멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하를 일으킨다.
이럴 땐 StringBuffer대신 StringBuilder를 사용하면 성능이 향상된다. (메서드는 동일하다)
// StringBuffer delete(int start, int end)
// 시작부터 끝 위치 사이에 있는 문자를 제거한다
// 단, 끝 위치의 문자는 제외된다.
StringBuffer sb = new StringBuffer("0123456");
StringBuffer sb2 = sb.delete(3,6);
System.out.println(sb2); // 출력 : 0126
//한글자만 지우기
sb.deleteCharAt(3) // 출력 012456
// StringBuffer insert(int pos, (int,String, char[] ...))
// 두 번째 매개변수로 받은 값을 문자열로 변환하여 pos 자리에 추가한다.
sb.insert(4, '.'); // 출력 0123.456
// StringBuffer replace(int Start, int end, String str)
sb.replace(3, 6, "AB"); // 출력 012AB6
// StringBuffer reverse()
// 문자열을 뒤집는다.
sb.reverse(); // 출력 6543210
수학관련 static메서드의 집합이다.
숫자의 절대값
// Math.abs(-10); // 출력결과 10
큰 값
// Math.max();
작은 값
// Math.min();
반올림
// Max.roung();
문제 출처 : 프로그래머스
class Solution {
public String solution(String str1, String str2) {
String answer = "";
for (int i = 0; i < str1.length(); i++) {
answer += str1.substring(i,i+1);
answer += str2.substring(i,i+1);
}
return answer;
}
}
반복문으로 substring의 인덱스 값을 늘려 한 문자씩 자르고 answer에 추가하는 식으로 풀었다.
class Solution {
public String solution(String[] arr) {
String answer = "";
for (int i = 0; i < arr.length; i++) {
answer += arr[i];
}
return answer;
}
}
본능적으로 arr.length();를 입력하고 왜 오류가 뜨는지 살짝 당황했다.
배열의 길이는 length()가 아니라 length를 써야한다.
다른 사람의 풀이로 String.join("", arr);를 쓰면 한번에 해결 가능한 것을 알았다.
class Solution {
public String solution(String my_string, int k) {
String answer = "";
for (int i = 0; i < k; i++) {
answer += my_string;
}
return answer;
}
}
메서드들을 사용해서 풀어야하는데 반복문이 먼저 생각난다.
my_string.repeat(k);를 쓰면 한줄로 해결 할 수 있다
class Solution {
public int solution(int a, int b) {
String answer1 = String.valueOf(a) + String.valueOf(b);
String answer2 = String.valueOf(b) + String.valueOf(a);
if (Integer.valueOf(answer1) > Integer.valueOf(answer2)) {
return Integer.valueOf(answer1);
} else {
return Integer.valueOf(answer2);
}
}
}
형변환 마스터를 꿈꾸며 valueOf로 도배해봤다..
숫자형을 문자형으로 바꾸는 방법은 숫자+"" 하면 문자형으로 바뀐다지만
나중에 가독성적인 측면이나 valueOf가 속도가 더 빠르대서 그걸로 했다..
class Solution {
public int solution(int a, int b) {
if(Integer.valueOf(a + "" + b) < (2 * a * b)) {
return (2 * a * b);
} else {
return Integer.valueOf(a + "" + b);
}
}
}
또 비슷한 유형의 문제라 이번엔 숫자 +""로 형변환 후 풀었다.
확실히 편하긴 한 것 같다.
class Solution {
public int solution(int num, int n) {
if (num % n == 0) {
return 1;
} else {
return 0;
}
}
}
class Solution {
public int solution(int number, int n, int m) {
if (number % n == 0 && number % m == 0) {
return 1;
} else {
return 0;
}
}
}
class Solution {
public int solution(int n) {
int answer = 0;
if (n % 2 == 0) {
for (int i = 0; i <= n; i+=2) {
answer += i*i;
}
} else {
for (int i = 1; i <= n; i+=2) {
answer += i;
}
}
return answer;
}
}
class Solution {
public int solution(String ineq, String eq, int n, int m) {
if (ineq.equals(">")) {
if (eq.equals("=")) {
return n >= m ? 1 : 0;
} else if (eq.equals("!")) {
return n > m ? 1 : 0;
}
} else if (ineq.equals("<")) {
if (eq.equals("=")) {
return n <= m ? 1 : 0;
} else if (eq.equals("!")) {
return n < m ? 1 : 0;
}
}
return 0;
}
}
문자열을 비교할 때 사용하는 equals,
평소처럼 if문으로 쓰려다가 삼항연산자를 쓰지 않으면 정말 코드가 미친듯이
길어질 것 같아서 삼항연산자로 리턴했다...
class Solution {
public int solution(int a, int b, boolean flag) {
return flag ? a+b : a-b;
}
}
간단했다.