2023.08.16 - StringBuffer, Math, 알고리즘

mjjin·2023년 8월 16일
0

StringBuffer

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

Math

수학관련 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);
        }
    }
}

또 비슷한 유형의 문제라 이번엔 숫자 +""로 형변환 후 풀었다.
확실히 편하긴 한 것 같다.

n의 배수

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문으로 쓰려다가 삼항연산자를 쓰지 않으면 정말 코드가 미친듯이
길어질 것 같아서 삼항연산자로 리턴했다...

flag에 따라 다른 값 반환하기

class Solution {
    public int solution(int a, int b, boolean flag) {
        return flag ? a+b : a-b;
    }
}

간단했다.

0개의 댓글