[프로그래머스 - 자바(JAVA)] 34 : 이웃한 칸 | 올바른 괄호

서예진·2024년 3월 7일
0

목차

▸ 이웃한 칸
▸ 올바른 괄호


✅ 이웃한 칸 : Lv.1

▼ 문제

출처 : 코딩테스트 연습 > PCCE 기출문제 > [PCCE 기출문제] 9번 / 이웃한 칸

▼ 내 풀이

  • 문제에서 제시한 의사코드를 따라서 코드를 작성했다.
  • 문제에서 제시한 의사코드는 다음과 같다.
    1. 정수를 저장할 변수 n을 만들고 board의 길이를 저장합니다.
    2. 같은 색으로 색칠된 칸의 개수를 저장할 변수 count를 만들고 0을 저장합니다.
    3. h와 w의 변화량을 저장할 정수 리스트 dh, dw를 만들고 각각 [0, 1, -1, 0], [1, 0, 0, -1]을 저장합니다.
    4. 반복문을 이용해 i 값을 0부터 3까지 1 씩 증가시키며 아래 작업을 반복합니다.
      4-1. 체크할 칸의 h, w 좌표를 나타내는 변수 h_check, w_check를 만들고 각각 h + dh[i], w + dw[i]를 저장합니다.
      4-2. h_check가 0 이상 n 미만이고 w_check가 0 이상 n 미만이라면 다음을 수행합니다.
      4-2-a. board[h][w]와 board[h_check][w_check]의 값이 동일하다면 count의 값을 1 증가시킵니다.
    5. count의 값을 return합니다.
import java.util.*;

class Solution {
    public int solution(String[][] board, int h, int w) {
        int n = board.length;
        int count = 0;
        List<Integer> dh = new ArrayList<>();
        List<Integer> dw = new ArrayList<>();
        
        dh.add(0);
        dh.add(1);
        dh.add(-1);
        dh.add(0);
        
        dw.add(1);
        dw.add(0);
        dw.add(0);
        dw.add(-1);
        
        for(int i = 0; i <=3; i++) {
            int h_check = h + dh.get(i);
            int w_check = w + dw.get(i);
            
            if(h_check>=0 && h_check<n && w_check>=0 && w_check<n){
                if(board[h][w].equals(board[h_check][w_check])){
                    count++;
                }
            }
        }
        return count++;
    }
}

✅ 올바른 괄호 : Lv.2

▼ 문제

출처 : 코딩테스트 연습 > 스택/큐 > 올바른 괄호

▼ 내 풀이

  • 이 문제는 예전에 대학교에서 c# 으로 푼 경험이 있어 쉽게 풀 수 있었다.
  • 스택을 활용하여 문제를 풀었다.
  • EmptyStackException이 게속해서 발생해서 코드를 살펴보니 깜빡하고 break를 적용하지 않아서 발생했었다.
import java.util.*;

class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        Stack<Character> st = new Stack<>();
        
        char[] c = s.toCharArray();
        
        for(int i = 0; i < c.length; i++) {
            if(c[i] == '('){
                st.push(c[i]);
            } else {
                if(st.isEmpty()){
                    answer = false;
                    break;
                }
                st.pop();
            }
        }
        if(!st.isEmpty()) {
            answer = false;
        } 
        
        return answer;
    }
}

profile
안녕하세요

0개의 댓글