https://school.programmers.co.kr/learn/courses/30/lessons/172928
[소스 코드]
// 23.06.12
// https://sirius7.tistory.com/
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<string> park, vector<string> routes) {
vector<int> answer;
for(int i=0;i<park.size();i++){
for(int j=0;j<park[i].length();j++) {
if(park[i][j]=='S'){
answer.push_back(i);
answer.push_back(j);
}
}
}
for(string s:routes){
string direction = s.substr(0,s.find(' '));
int length = stoi(s.substr(s.find(' ')));
int tmpy=answer[0];
int tmpx=answer[1];
int i=0;
for(;i<length;i++){
if(direction=="N"){
tmpy-=1;
} else if (direction=="S"){
tmpy+=1;
} else if (direction=="W"){
tmpx-=1;
} else if (direction=="E"){
tmpx+=1;
}
if(tmpx<0 || tmpy<0 || tmpx>=park[i].length() || tmpy>=park.size() || park[tmpy][tmpx]=='X'){
break;
}
}
if(i==length) {
answer[0] = tmpy;
answer[1] = tmpx;
}
}
return answer;
}
특별히 어려운 자료구조를 요구하는 문제는 아닙니다.
제가 작성한것과 같이 for문과 if문만 가지고도 시간초과 없이 풀어낼 수 있는 간단한 문제입니다.
string direction = s.substr(0,s.find(' ')); 과 같은 식을 이용해서 방향과 거리를 구했는데,
지금 보니까 거리가 0~9여서 굳이 substr을 사용하지 않아도 쉽게 거리를 구할 수 있는 문제네요.
핵심적인 부분은 산책을 하면서 장애물을 만나거나, 공원을 나가게 되는지를 확인하는 건데,
저는 방향에따라 한칸씩 이동하면서 그러한 조건을 만족하면 반복문을 탈출하게 만들어
정상적인 이동을 한 경우에만 (반복문이 끝까지 진행된 경우 == i가 0에서 이동거리만큼 커진 경우)
이동거리를 반영하는 식으로 문제를 해결했습니다.
'학습 정리 > 👨💻 PS Study' 카테고리의 다른 글
[C++] 프로그래머스 - 연속된 부분 수열의 합 (0) | 2023.06.21 |
---|---|
[C++] 프로그래머스 - 두 원 사이의 정수 쌍 (0) | 2023.06.18 |
[C++] 프로그래머스 - 달리기 경주 (0) | 2023.05.19 |
[C++] 프로그래머스 - 성격 유형 검사하기 (0) | 2023.05.15 |
[C++] 백준 11729번 - 하노이 탑 이동 순서 (0) | 2023.01.31 |