언리얼 공부 블로그
코드카타: 달리기 경주, 공원 산책 본문

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;
}