Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

언리얼 공부 블로그

코드카타: 달리기 경주, 공원 산책 본문

카테고리 없음

코드카타: 달리기 경주, 공원 산책

maypawn 2025. 9. 9. 20:01

 

callings 배열에 기록된 추월을 players 배열에 반영 후 return

 

#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

vector<string> solution(vector<string> players, vector<string> callings) {
    vector<string> answer;
    // 이름과 현재 등수를 맵에 저장
    unordered_map<string, int> players_index;
    
    for (int i = 0; i < players.size(); ++i) {
        players_index[players[i]] = i;
    }
    // calling 배열 순회, 등수 변경
    for (const string& calling : callings) {
        // 추월하는 선수 이름 calling
        const string& chaser = calling;
        // 추월하는 선수의 현재 등수
        int chaser_idx = players_index[chaser];
        
        // 추월당하는 선수 (바로 왼쪽)의 이름
        string overtaken_player = players[chaser_idx - 1];
        // players 배열에서 두 선수 위치 교체
        swap(players[chaser_idx], players[chaser_idx - 1]);
        
        // 맵에 저장된 두 선수 등수 정보 갱신
        players_index[chaser] = chaser_idx - 1;
        players_index[overtaken_player] = chaser_idx;
    }
    answer = players;
    
    return answer;
}

 

 

공원 산책

로봇 강아지가 routes 에 따라 park 를 산책 후, 최종 위치의 좌표 [세로, 가로] 를 return

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<string> park, vector<string> routes) {
    vector<int> answer;
    int currentY, currentX;
    bool found = false;
    
    // park 에서 시작 위치 (x, y) 찾기
    for (int i = 0; i < park.size(); ++i) {
        for (int j = 0; j <park[i].size(); ++j) {
            if (park[i][j] == 'S') {
                currentY = i;
                currentX = j;
                found = true; // S 값 전부 찾았다면 반복 종료
                break;
            }
        }
        if (found) {
            break;
        }
    }
    // routes를 순회
    for (const string& route : routes) {
        // 방향
        char direction = route[0];
        // 거리 
        int distance = route[2] - '0';
        
        // N 방향
        if (direction == 'N') {
            if (currentY - distance < 0) {
                continue;
            }
            bool isBlocked = false;
            for (int i = 1; i <= distance; ++i) {
                if (park[currentY - i][currentX] == 'X') {
                    isBlocked = true;
                    break;
                }
            }
            if (!isBlocked) {
                currentY -= distance;
            }
            // S 방향
        } else if (direction == 'S') {
            if (currentY + distance >= park.size()) {
                continue;
            }
            bool isBlocked = false;
            for (int i = 1; i <= distance; i++) {
                if (park[currentY + i][currentX] == 'X') {
                    isBlocked = true;
                    break;
                }
            }
            if (!isBlocked) {
                currentY += distance;
            }
            // W 방향
        } else if (direction == 'W') {
            if (currentX - distance < 0) {
                continue;
            }
            bool isBlocked = false;
            for (int i = 1; i <= distance; ++i) {
                if (park[currentY][currentX - i] == 'X') {
                    isBlocked = true;
                    break;
                }
            }
            if (!isBlocked) {
                currentX -= distance;
            }
            // E 방향
        } else if (direction == 'E') {
            if (currentX + distance >= park[0].size()) {
                continue;
            }
            bool isBlocked = false; 
            for (int i = 1; i <= distance; i++) {
                if (park[currentY][currentX + i] == 'X') {
                    isBlocked = true;
                    break;
                }
            }
            if (!isBlocked) {
                currentX += distance; 
            }
        }
    }
    answer.push_back(currentY);
    answer.push_back(currentX);
    
    return answer;
}