Day86

강태훈·2026년 5월 4일

nbcamp TIL

목록 보기
86/97

알고리즘 코드카타

Classes With at Least 5 Students

select class
from Courses
group by class
having count(student) >= 5
;

공원 산책

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] answer = findstart(park);

        for (String route : routes) {
            char op = route.charAt(0);
            int index = Integer.parseInt(route.substring(2));

            boolean bool = false;

            switch (op) {
                case 'N':
                    bool = movingy(answer[1], answer[0], park, -index);
                    if (bool) {
                        answer[0] -= index;
                    }
                    break;
                case 'S':
                    bool = movingy(answer[1], answer[0], park, index);
                    if (bool) {
                        answer[0] += index;
                    }
                    break;
                case 'W':
                    bool = movingx(answer[1], answer[0], park, -index);
                    if (bool) {
                        answer[1] -= index;
                    }
                    break;
                case 'E':
                    bool = movingx(answer[1], answer[0], park, index);
                    if (bool) {
                        answer[1] += index;
                    }
                    break;
                default:
                    break;
            }
        }

        return answer;
    }

    public int[] findstart(String[] park){
        int[] answer = {0,0};

        for (int i = 0; i < park.length; i++) {
            int index = park[i].indexOf("S");
            if (index != -1) {
                answer[0] = i;
                answer[1] = index;
            }
        }

        return answer;
    }

    public boolean movingx(int x, int y, String[] park, int d) {
        if (x + d < 0 || x + d >= park[0].length()) {
            return false;
        }

        List<Integer> indexl = new ArrayList<>();

        char[] chars = park[y].toCharArray();
        for (int i = 0; i<chars.length; i++){
            if (chars[i] == 'X'){
                indexl.add(i);
            }
        }

        if (indexl.size() == 0) {
            return true;
        }else {
            int sum = 0;

            for (Integer index : indexl) {
                if (!check(x, d, index)) {
                    sum++;
                }
            }

            if (sum == 0) {
                return true;
            }
        }

        return false;
    }

    public boolean movingy(int x, int y, String[] park, int d) {
        if (y + d < 0 || y + d >= park.length) {
            return false;
        }

        StringBuilder yindex = new StringBuilder();
        List<Integer> indexl = new ArrayList<>();

        for (int i = 0; i < park.length; i++) {
            yindex.append(park[i].charAt(x));
            if (park[i].charAt(x) == 'X') {
                indexl.add(i);
            }
        }

        if (indexl.size() == 0) {
            return true;
        }else {
            int sum = 0;

            for (Integer index : indexl) {
                if (!check(y, d, index)) {
                    sum++;
                }
            }

            if (sum == 0) {
                return true;
            }
        }

        return false;
    }

    public boolean check(int target, int d, int index){
        if (d >= 0) {
            if (index > target + d || index < target) {
                return true;
            }
        } else {
            if (index > target || index < target + d) {
                return true;
            }
        }

        return false;
    }
}

0개의 댓글