반응형
3. 최솟값 만들기

문제

import java.util.*;

class Solution
{
    public int solution(int []A, int []B)
    {
        int answer = 0;

        Arrays.sort(A);
        Arrays.sort(B);
        
        for(int i=0; i<A.length; i++){
            answer += A[i] * B[B.length-1-i];
        }
        
        return answer;
    }
}

<작성한 코드>

두 배열 A, B를 오름차순으로 정렬해 줬다. 그 뒤 문자열의 길이만큼 A의 낮은 수의 값과 B의 높은 수의 값을 차례로 곱해서 더해줬다. 

 

 

 

 

4. 올바른 괄호

문제

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<Character> stack = new Stack<>();
        
        for(char ch : s.toCharArray()){
            if(ch == '('){
                stack.push(ch);
            } else if(ch == ')'){
                if(stack.isEmpty()){
                    return false;
                } else{
                    stack.pop();
                }
            }
        }
        
        if(stack.isEmpty()){
            answer = true;
        } else{
            answer = false;
        }

        return answer;
    }
}

<작성한 코드>

Stack형으로 변수를 하나 만들었다. 그 뒤 문자열 s를 char형으로 변환시킨뒤 forEach문을 사용하였다. 만약 '('라면 stack에 push 해준다. ')'라면 stack이 비어있는지 확인한다. 만약 비어있다면 false를 반환한다. 비어있지 않다면 stack.pop을 사용해서 값을 꺼낸다. for문이 끝나면 stack이 비어있는지 확인하고, 비어있다면 answer에 true를 넣어주고 비어있지 않다면 answer에 false를 대입한다. 그 뒤 answer를 반환해 줬다.

 

 

 

5. 이진 변환 반복하기

문제

 

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        
        while(s.length() != 1){
            int cnt = 0;
            
            for(int i=0; i<s.length(); i++){
                if(s.charAt(i) == '0'){
                    answer[1]++;
                } else{
                    cnt++;
                }
            }
            
            s = Integer.toBinaryString(cnt);
            answer[0]++;
        }
        
        return answer;
    }
}

<작성한 코드>

이진수 변환 횟수와 0의 개수를 반환하면 되기 때문에 answer의 길이는 2로 잡았다. 그 뒤 while문으로 s의 길이가 1이 아닐 때 반복하도록 했고, for문에서는 s의 원소들을 비교해 가며 0이라면 answer의 0의 개수를 저장할 배열 answer [1]을 1 더 해주고, 아니라면 cnt에 1을 더해서 1의 개수를 세줬다. 그 뒤 Integer.toBinaryString(cnt)를 통해서 1의 개수를 이진법으로 변환해서 s에 저장해 줬다. 그 뒤 answer [0]에 1을 추가해서 변환된 횟수를 1 증가시켰다. 이렇게 반복 후 s의 길이가 1이 되면 while문을 종료시킨 뒤 answer을 반환하였다.

반응형

+ Recent posts