본문 바로가기

Algorithm

자바 알고리즘 연습(6)

음양 더하기

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        for (int i = 0; i < absolutes.length; i++){
            if(!signs[i]) {
                answer -= absolutes[i];
            }else {
                answer += absolutes[i];
            } 
        }
        return answer;
    }
}

 

핸드폰 번호 가리기

String 길이 : length()

Array 길이 : length

  • String은 불변객체이기 때문에 문자열을 수정할 때마다 새로운 객체를 생성
  • StringBuilder는 문자열을 수정해도 기존 객체를 그대로 사용
  • 단일스레드 환경에서만 사용 -> 멀티스레드는  위험 (동기화를 안함)
    • 멀티스레드 환경에서는 -> StringBuffer (동기화 지원)
  • 동기화 : 멀티스레드 환경에서는 여러 스레드가 동시에 실행되며, 같은 메모리 공간이나 데이터를 동시에 읽고/쓰기 가능 ->  이 과정에서 다음과 같은 문제가 발생 -> 메서드나 블록을 동기화하여 한 번에 하나의 스레드만 실행되도록 제한
    • 즉. 여러 스레드가 공유 자원에 접근할 때 데이터의 일관성과 안전성을 보장하기 위해 작업 순서를 제어하는 메커니즘
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
class Solution {
    public String solution(String phone_number) {
        StringBuilder answer = new StringBuilder();
        for (int i = 0; i < phone_number.length(); i++){
            if(i < (phone_number.length() - 4)){
                answer.append("*");
            }else {
                answer.append(phone_number.charAt(i));
            }
        }
        return answer.toString();
    }
}

 

없는 숫자 더하기

class Solution {
    public String solution(String phone_number) {
        StringBuilder answer = new StringBuilder();
        for (int i = 0; i < phone_number.length(); i++){
            if(i < (phone_number.length() - 4)){
                answer.append("*");
            }else {
                answer.append(phone_number.charAt(i));
            }
        }
        return answer.toString();
    }
}

 

제일 작은 수 제거하기

  • Arrays.sort(sortedArr) : 해당 배열의 원소값을 오름차순으로 정렬하는 메서드, 정렬되어버림
  • int[] sortedArr = Arrays.copyOf(arr, arr.length) : 배열을 복사
  • int[] answer = new int[arr.length - 1] : 배열의 길이는 뒤에
  • int[] ans = {-1} : 생성과 동시에 초기화는 중괄호와 수 명시 안하고 하기 
import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = new int[arr.length - 1];
        int[] sortedArr = Arrays.copyOf(arr, arr.length);
        
        if(arr.length == 1) {
            int[] ans = {-1};
            return ans;
        }
        
        Arrays.sort(sortedArr);
        int min = sortedArr[0];
        int idx = 0;
        
        for (int i = 0; i < arr.length; i++){
            if (arr[i] != min) {
                answer[idx] = arr[i];
                idx++;
            }
        }
        
        return answer;
    }
}