알고리즘/프로그래머스

11/25 오답노트

이채림 2024. 11. 25. 22:00
공원 산책
class Solution {
    public int[] solution(String[] park, String[] routes) {
        int x = 0;
        int y = 0;
        
        // 시작 위치 'S' 찾기
        for(int i=0; i<park.length; i++) {
            if(park[i].contains("S")) {
                x = i;
                y = park[i].indexOf("S");
                break;
            }
        }
        
        // 명령어 처리
        for(String route : routes) {
            String direction = route.split(" ")[0];
            int step = Integer.parseInt(route.split(" ")[1]);
            
            int nx = x; // 이동 중 x 좌표
            int ny = y; // 이동 중 y 좌표
            
            for(int i=0; i<step; i++) {
                switch(direction) {
                    case "E":
                        ny++;
                        break;
                    case "W":
                        ny--;
                        break;
                    case "S":
                        nx++;
                        break;
                    case "N":
                        nx--;
                        break;
                }
                
                // 경계 검사
                if(nx >= 0 && ny >= 0 && nx < park.length && ny < park[0].length()) {
                    // 장애물 검사
                    if(park[nx].charAt(ny) == 'X') {
                        break;
                    }
                    // 이동 완료 시 위치 갱신
                    if(i == step - 1) {
                        x = nx;
                        y = ny;
                    }
                } else {
                    break; // 범위를 벗어나면 이동 취소
                }
            }
        }
        return new int[] {x, y};
    }
}

 

 

시작 위치 찾기

: park 배열을 탐색해서 'S'의 위치를 찾아 x와 y의 초기값으로 설정함

 

명령어 처리 ex. "E 2"

: direction과 step을 분리해 이동 방향과 거리 설정함

 

이동 로직

: 각 방향(E, W, S, N)에 따라 좌표(nx, ny)를 업데이트함

 

경계 및 장애물 검사

: 이동 도중 경계 밖으로 나가거나 장애물('X')을 만나면 이동을 중단함

 

최종 위치 갱신

: 명령어의 모든 이동이 완료되었을 때 현재 위치를 갱신함

 

결과 반환

: return new int[] {x, y}


약수의 개수와 덧셈

 

약수의 개수가 짝수인지 홀수인지 구분하는 법

제곱수(1, 4, 9, 16, ...)는 약수의 개수가 홀수임

 

            int sqrt = (int) Math.sqrt(i);
            if(sqrt * sqrt == i) {
                sum -= i;
            }

3진법 뒤집기

 

10진수를 3진수로 변환하는 방법

        // 10진수를 3진수로 변환
        String three = Integer.toString(n, 3);
        
        // 3진수 뒤집기
        String reversed = new StringBuilder(three).reverse().toString();
        
        // 뒤집은 3진수 10진수로 변환
        int result = Integer.parseInt(reversed, 3);

 

String은 불변 객체이므로 reverse() 메서드 X

StringBuilder는 가변 객체로 reverse()를 이용해 문자열을 뒤집는 기능을 제공함


두 개 뽑아서 더하기

 

TreeSet을 int[]로 변환할 때 반복문을 사용해 직접 배열로 복사할 수 있음

        int[] result = new int[sortedSet.size()];
        int index = 0;
        for(int num : sortedSet) {
            result[index++] = num;
        }

체육복

 

슬픔 PD like

 

알고보니

 

도난핑도 고려해야돼 허허,,

 

도와줄사람!!!!!!!!