코딩테스트

알고리즘 문제풀이 2-3

Eprld 2025. 3. 12. 17:26

문제 1 / Bracket

-목표 : 괄호의 순서에 따라 정수를 반환하는 프로그램 구현

 

사용한 알고리즘 

Stack 

-스택을 사용하여 여는 괄호와 닫는 괄호를 구분하여 짝이 맞는지를 검사하였다.

 

최종 코드

import java.util.Stack;

class Solution {
    public int solution(String S) {
        int answer = 1;
        Stack<Character> stack = new Stack<>();

        for(char c : S.toCharArray()){
            if(c=='(' || c == '{' || c == '[' || c == '<'){
                stack.push(c);
            }else{
                if (stack.isEmpty()){
                    answer = 0;
                    return answer;
                }

                char top = stack.pop();
                if((c==')' && top != '(') ||
                        (c=='}' && top != '{') ||
                        (c==']' && top != '[') ||
                        (c=='>' && top != '<')){
                    answer = 0;
                    return answer;
                }
            }
        }

        if (!stack.isEmpty()) {
            answer = 0;
        }

        return answer;

    }
}

문제 2 / RepeatAlphabet

-목표 : 알파벳 문자열이 2회 연속으로 나타나면 제거하여 완전히 소거되면 1 남아있으면 0을 반환하는 프로그램

 

사용한 알고리즘 

Approach

-현재 시점에서 최적이라고 생각되는 것을 선택하는 알고리즘 사용 / 여기선 중복된 숫자 제거에 사용됨

 

문제 풀이

 StringBuilder

-가변한 문자열을 처리하기 위한 클래스 

-새로운 문자열을 추가하거나 변경하게 되면 기존의 객체로 추가 및 변경이 가능함

 

최종 코드

class Solution {
    public int solution(String S) {
        int answer = 0;
        StringBuilder sb = new StringBuilder(S);
        int index = 0;

        while(index < sb.length() -1){
            if(sb.charAt(index) == sb.charAt(index+1)){
                sb.delete(index, index+2);
                index = Math.max(0, index - 1);
            }else{
                index++;
            }
        }


        if(sb.length() == 0){
            answer = 1;
        }else{
            answer = 0;
        }
        return answer;
    }
}

 


문제 3 / FoodBj

-목표 : 짜장면의 그릇 수를 순위로 입력받아 총 상금과 우승자를 문자열로 반환하는 프로그램 

 

최종 코드

import java.util.*;
class Solution {
    public String solution(String[] bj, String[] one, String[] two) {
        String answer = "";

        List<String> BJList = new ArrayList<>(Arrays.asList(bj));

        for(String person : one){
            BJList.remove(person);
        }
        for(String person : two){
            BJList.remove(person);
        }

        if(BJList.size() != 1){
            return "";
        }
        String winner = BJList.get(0);


        return "1350만원" + "(" + winner + ")";

    }
}

문제 4 /  AsciiToString

 

-목표 : Ascii코드를 문자로 치환 후 이어붙여 문자열로 출력

 

문제 풀이

-StringBuilder를 사용하여 문자열을 조합.
 
-for문을 통해 arr을 순회하며 ascii값을 문자로 변환하여 추가를 하였다.

 

최종 코드

class Solution {
    public String solution(int[] arr) {
        String answer = "";
        StringBuilder sb = new StringBuilder();

        for(int i=0; i < arr.length; i++){
            sb.append((char) arr[i]);
        }

        return sb.toString();
    }
}

문제 5 / Calculator

-목표 : 문자열로 된 계산식을 이용하여 계산 결과를 출력하는 프로그램

 

문제 풀이

s="-3+26-7"

-문자열에 있는 숫자는 숫자로 변환, 계산식은 +, -로 계산이 가능하게 변환시킴

-변환시킨 문자열을 계산하고 값을 추출

 

최종 코드

-결괏값과 기댓값이 달라 조금 더 학습한 뒤 다시 풀어 볼 예정이다.

class Solution {
    public int solution(String s) {
        int answer = 0;
        int num = 0;
        String operator = "+";

        StringBuilder sb = new StringBuilder();

        for(char cal : s.toCharArray()){
            if(Character.isDigit(cal)){
                sb.append(cal);
            }else{
                if(sb.length() > 0){
                    num = Integer.parseInt(sb.toString());
                    sb.setLength(0);
                }

                if (operator == "+") {
                    answer += num;
                } else if (operator == "-") {
                    answer -= num;
                }
                //    operator = cal;
            }
        }


        if (sb.length() > 0) {
            num = Integer.parseInt(sb.toString());
            if (operator == "+") {
                answer += num;
            } else if (operator == "-") {
                answer -= num;
            }
        }

        return answer;
    }

}

 

'코딩테스트' 카테고리의 다른 글

알고리즘 문제풀이 3-2  (0) 2025.03.18
알고리즘 문제풀이 3-1  (0) 2025.03.18
알고리즘 문제풀이 2-4  (0) 2025.03.13
알고리즘 문제풀이 2-2  (0) 2025.03.12
알고리즘 문제풀이 2-1  (0) 2025.03.10