본문 바로가기
1-4. 코딩테스트 문제집(진행중)/PCCP(Lv0)

[PCCP] Lv0: 캐릭터의 좌표(120861) 해설

by cogito21_cpp 2024. 12. 25.
반응형

문제

- 문제 링크: 캐릭터의 좌표

 

해설

- 자료구조: 

- 시간복잡도: 

 

(풀이과정)

1) 

2) 

3) 

4) 

 

코드

(C언어)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(C++)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(C#)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(Java)

solution 1)

- N: keyinput의 길이

- 반복문은 keyinput 길이만큼 반복하고 내부 연산은 모두 시간 복잡도가 O(1)이므로 최종 시간 복잡도는 O(N)

더보기
import java.util.HashMap;

class Solution {
    // 보드의 경계 좌표를 벗어나는지 확인하는 메서드
    private static boolean isInBounds(int x, int y, int dx, int dy) {
        return Math.abs(x + dx) <= width && Math.abs(y + dy) <= height;
    }
    
    private static int width, height;
    
    public int[] solution(String[] keyinput, int[] board) {
        // 캐릭터의 초기 위치
        int x = 0, y = 0;
        // 각 방향에 대한 움직임
        HashMap<String, int[]> moves = new HashMap<>();
        moves.put("up", new int[]{0, 1});
        moves.put("down", new int[]{0, -1});
        moves.put("left", new int[]{-1, 0});
        moves.put("right", new int[]{1, 0});
        // 게임 경계 좌표
        width = board[0] / 2;
        height = board[1] / 2;
        
        for (String key : keyinput) {
            // 방향키에 따른 오프셋
            int dx = moves.get(key)[0];
            int dy = moves.get(key)[1];
            // 게임 맵의 크기를 벗어나지 않는지 확인
            if (isInBounds(x, y, dx, dy)) {
                x += dx;
                y += dy;
            }
        }
        // 캐릭터의 위치를 반환
        return new int[]{x, y};
    }
}

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(Python)

solution 1)

- N: keyinput의 길이

- 반복문은 keyinput 길이만큼 반복

- 내부 연산은 모두 O(1)

- 최종 시간 복잡도: O(N)

더보기
def solution(keyinput, board):
    # 캐릭터의 초기 위치
    x, y = 0, 0
    # 각 방향에 대한 움직임
    moves = {"up": [0, 1], "down": [0, -1], "left": [-1, 0], "right": [1, 0]}
    # 게임 경계좌표
    width, height = board[0] // 2, board[1] // 2
    
    # 보드의 경계좌표를 벗어나는지 확인하는 함수
    def is_in_bounds(x, y, dx, dy):
        return -width <= x + dx <= width and -height <= y + dy <= height
        
    for key in keyinput:
        # 방향키에 따른 오프셋
        dx, dy = moves[key]
        # 게임 맵의 크기를 벗어나지 않는지 확인
        if is_in_bounds(x, y, dx, dy):
            x += dx
            y += dy
    # 캐릭터의 위치를 반환
    return [x, y]

solution 2)

더보기
import

solution 3)

더보기
import

 

(JavaScript)

solution 1)

- N: keyinput의 길이

- 반복문은 keyinput 길이만큼 반복하고 내부 연산은 모두 시간 복잡도가 O(1)

- 최종 시간 복잡도: O(N)

더보기
function solution(keyinput, board) {
    // 캐릭터의 초기 위치
    let x = 0;
    let y = 0;
    
    // 각 방향에 대한 움직임
    const moves = {
        up: [0, 1],
        down: [0, -1],
        left: [-1, 0],
        right: [1, 0]
    };
    
    // 게임 경계 좌표
    const width = board[0] / 2;
    const height = board[1] / 2;
    
    // 보드의 경계 좌표를 벗어나는지 확인하는 함수
    function isInBounds(x, y, dx, dy) {
        return -width <= x + dx && x + dx <= width && -height <= y + dy && y + dy <= height;
    }
    
    for (const key of keyinput) {
        // 방향키에 따른 오프셋
        const [dx, dy] = moves[key];
        
        // 게임 맵의 크기를 벗어나지 않는지 확인
        if (isInBounds(x, y, dx, dy)) {
            x += dx;
            y += dy;
        }
    }
    
    // 캐릭터의 위치 반환
    return [x, y];
}

solution 2)

더보기
import

solution 3)

더보기
import

 

반응형