반응형
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을 반환한다.

반응형

+ Recent posts