ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 LV2 - 251014
    알고리즘 2025. 10. 14. 17:09

    LV2. 최댓값과 최솟값

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Collections;
    
    class Solution {
        public String solution(String s) {
            // 공백으로 잘라서 list 넣기
            String[] tmpList = s.split(" ");
    
            List<Integer> acsList = new ArrayList<>();
            for (String a : tmpList) {
                acsList.add(Integer.valueOf(a));
            }
    
            // list 오름차순
            Collections.sort(acsList);
    
            // 양쪽 끝 값 정답으로 반환
            String answer = acsList.get(0) + " " + acsList.get(acsList.size()-1);
    
            return answer;
        }
    }

     


    LV2. 올바른 괄호

    import java.util.*;
    
    class Solution {
        boolean solution(String s) {
            // 문자열 s > split
            String[] tmpStr = s.split("");
            
            if (tmpStr[0].equals(")") || tmpStr[tmpStr.length-1].equals("(")) {
                return false;
            }
            
            // String[] 하나씩 꺼내면서 stack에 넣기
            // stack에 1개 넣고 그다음 짝 맞으면 안 넣고 둘 다 remove
            Stack<String> stackStr = new Stack<>();
            for (String x : tmpStr) {
                if (stackStr.isEmpty()) {
                    stackStr.push(x);
                } else {
                    if (stackStr.peek().equals("(") && x.equals(")")) {
                        stackStr.pop();
                    } else {
                        stackStr.push(x);
                    }
                }
            }
                                
            // Stringp[] 내용 끝나고 stack에 남은게 있다면 false 반환
            if (stackStr.isEmpty()) {
                return true;
            } else {
                return false;
            }
        }
    }

    아주 유사한 문제를 풀어봤었다

    그때와 같이 스택을 사용해서 풀었더니 정답은 맞는데 효율성 테스트에서 실패했다

    스택 문제니까 당연히 스택으로 풀어야지 싶어서 고민하다가 결국 포기

     

     

    다른 사람들 답을 보니까 대부분 스택 말고 count로 문제를 풀었다 ... 약간의 허무함...

     

     

    LV2. 최솟값 만들기

    import java.util.*;
    import java.util.stream.*;
    
    class Solution
    {
        public int solution(int []A, int []B) {
            int answer = 0;
            
            // List<Integer> listA = Arrays.asList(A); 
            // Collections.sort(ListA);
            // List<Integer> ListB = Arrays.asList(B); 
            // Collections.reverse(ListB);
            
            // int[] → List<Integer> 변환
            List<Integer> listA = Arrays.stream(A).boxed().collect(Collectors.toList());
            List<Integer> listB = Arrays.stream(B).boxed().collect(Collectors.toList());
            
            Collections.sort(listA);
            Collections.sort(listB, Collections.reverseOrder());
    
            for (int i = 0; i < listA.size(); i++) {
                answer += (listA.get(i) * listB.get(i));
            }
            
            System.out.print(answer);
    
            return answer;
        }
    }

    이 문제도 마찬가지 정답은 맞았는데 효율성 테스트에서 실패했다

    728x90

    '알고리즘' 카테고리의 다른 글

    프로그래머스 LV2 - 251023  (0) 2025.10.23
    프로그래머스 LV2 - 251022  (0) 2025.10.22
    section7.10  (0) 2025.09.04
    section7.9  (0) 2025.09.03
    section7.8  (0) 2025.09.03
Designed by Tistory.