프로그래머스LV2_1

개발자를 꿈꾸는 뚱이·2026년 3월 21일

코딩테스트 스터디

목록 보기
23/39

목적

백엔드 준비하면서 자바에 익숙해지고 취업 때 코딩테스트 대비를 위한 스터디로 프로그래머스 LV2 문제를 하루에 풀 수 있는 양으로 풀고 생각을 정리하는 목적이다.
기록은 문제, 풀이 과정, 시행착오, 풀이 코드, 개선을 했으면 개선 코드를 기록할 것이다.


최댓값과 최솟값

접근 과정

  1. 문자열을 공백 기준으로 분할
  2. 분할된 문자열을 순회하면서 최댓값과 최솟값을 찾음
  3. 최솟값과 최댓값을 공백과 함께 반환하여 해결

시행착오

  • 시행착오 없이 해결

해결 코드

  • 접근 과정 그대로 하면 해결
    import java.util.*;
    
    class Solution {
        public String solution(String s) {
            String[] str = s.split(" ");
            int min = Integer.MAX_VALUE;
            int max = Integer.MIN_VALUE;
            for(String st : str){
                int n = Integer.parseInt(st);
                min = Math.min(n, min);
                max = Math.max(n, max);
            }
            return min + " " + max;
        }
    }

시간복잡도

O(n)O(n)


JadenCase 문자열 만들기

접근 과정

  1. 문자열을 모두 소문자로 바꿈
  2. 문자열을 순회하면서 공백을 기준으로 첫 번째 문자인지 체크하여 문자열에 붙임
  3. 만들어진 문자열을 반환하여 해결

시행착오

  • 시행착오 없이 해결

해결 코드

  • 접근 과정 그대로 하면 해결
    class Solution {
        public String solution(String s) {
            s = s.toLowerCase();
            StringBuilder sb = new StringBuilder();
            char[] ch = s.toCharArray();
            boolean first = true;
            for(char c : ch){
                if(first && c != ' '){
                    first = false;
                    sb.append(Character.toUpperCase(c));
                }
                else if(c == ' '){
                    first = true;
                    sb.append(' ');
                }
                else{
                    sb.append(c);
                }
            }
            return sb.toString();
        }
    }

시간복잡도

O(n)O(n)


올바른 괄호

접근 과정

  1. 닫힌 괄호일 때 열린 괄호가 이전에 나왔는지 체크하기 위해 스택 자료구조 선택
  2. 열린 괄호이면 스택에 넣음
  3. 닫힌 괄호이면 스택에서 제거(스택이 비어있으면 false 반환)
  4. 스택이 비어 있는지 반환(비어 있지 않다면 짝이 안맞으므로 false)

시행착오

  • 시행착오 없이 해결

해결 코드

  • 접근 과정대로 구현하여 해결
  • 해결하고 나서 스택을 굳이 사용하지 않아도 될 것 같다고 생각하여 개선을 시도
  • 열린 괄호의 개수를 세고 닫힌 괄호일 때 개수를 뺌
    • 개수를 뺄 때 0이면 false 반환
    • 문자열을 돌고 개수가 0인지를 반환(0이 아니라면 짝이 안맞으므로 false)
    import java.util.*;
    
    class Solution {
        boolean solution(String s) {
            Stack<Character> st = new Stack<>();
            for(char c : s.toCharArray()){
                if(c == '('){
                    st.push(c);
                }
                else{
                    if(st.isEmpty()) return false;
                    st.pop();
                }
            }
            return st.isEmpty();
        }
    }
    
    // 개선
    class Solution {
        boolean solution(String s) {
            int count = 0;
            for(int i = 0; i < s.length(); i++){
                if(s.charAt(i) == '('){
                    count++;
                } else {
                    if(count == 0) return false;
                    count--;
                }
            }
            return count == 0; 
        }
    }

시간복잡도

O(n)O(n)
profile
개발자가 되기 위해 열심히 춤추는 중이에요 🕺

0개의 댓글