프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 2 (9~10번 문제풀이) / Level 0 (224/224) / Level 1 (77/77)

남건욱 2023. 12. 22. 09:16

목차

    반응형
    9. 짝지어 제거하기

    문제

    import java.util.*;
    
    class Solution
    {
        public int solution(String s)
        {
            int answer = -1;
            Stack<Character> stack = new Stack<>();   
            
            for(char ch : s.toCharArray()){
                if(!stack.isEmpty() && stack.peek() == ch){
                    stack.pop();
                } else{
                    stack.push(ch);
                }
            }
            
            if(stack.isEmpty()){
                answer = 1;
            } else{
                answer = 0;
            }
    
    
            return answer;
        }
    }

    <작성한 코드>

    stack을 하나 생성했다. 그 뒤 문자열 s를 char형으로 변환시킨 뒤 forEach문을 사용했다. if문을 사용해서 stack이 비어있지 않고 stack의 제일 최근값이 ch와 같으면 stack에서 값을 꺼냈다. 만약 같지 않다면 stack에 ch를 넣어줬다. 그 뒤 stack이 비어있으면 answer에 1일 넣고, 비어있지 않다면 0을 넣어주고 반환하였다.

     

     

     

    10. 카펫

    문제

    class Solution {
        public int[] solution(int brown, int yellow) {
            int[] answer = new int[2];
            int total = brown + yellow;
    
            for(int i=3; i<total; i++){
                int j = total / i;
                
                if(total%i == 0 && j >= 3){
                    int width = Math.max(i, j);
                    int height = Math.min(i, j);
                    int yellowCnt = (width - 2) * (height - 2);
                    
                    if(yellowCnt == yellow){
                        answer[0] = width;
                        answer[1] = height;
                        break;
                    }
                }
            }
            
            return answer;
        }
    }

    <작성한 코드>

    answer의 크기는 2로 잡았다. total은 격자의 총 개수이므로 갈색+노란색을 더해서 저장했다. 그 뒤 for문을 사용해서 3부터 total까지 비교했다. j는 total/i로 해줬다. 이유는 i, j를 곱해서 total이 나와야 한다. 그 뒤 조건으로 i가 total의 약수이고 j가 3보다 크다면 i, j 둘 중 큰 값을 width, 작은 값을 height에 넣어줬다. yellow의 개수는 (width-2) * (height-2)로 구해줬다. 이유는 노란색 격자 테두리는 갈색 격자를 제외한 안쪽이므로 가로, 세로에서 2를 빼주고 곱하면 노란색 격자수가 된다. 이렇게 구한 yellowCnt와 매개변수로 받은 yellow가 일치하면 answer [0]에는 width, answer [1]에는 height를 넣고 반복문을 종료시켰다. 마지막으로 answer을 반환한다.

    반응형
    프로필사진

    남건욱's 공부기록