우리가 위치 (0, 0)에 있다고 가정합니다. 우리는 4개의 문자를 사용하여 연속적인 방향을 나타내는 문자열이 있습니다. 주어진 방향을 모두 고려한 후 (0, 0) 위치로 돌아갈 수 있는지 확인해야 합니다. 기호는
- 동쪽의 E
- W는 서쪽
- 북쪽은 N
- 남쪽을 위한 S.
따라서 입력이 "EENWWS"와 같으면 출력이 true가 되고 동쪽으로 2칸 이동한 다음 북쪽으로 이동한 다음 서쪽으로 2칸 이동한 다음 다시 남쪽으로 이동하므로 이것이 시작 위치입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- l :=이동 배열의 크기
- l이 0과 같으면 -
- 참을 반환
- lft :=0, 위로 :=0
- 초기화 i의 경우:=0, i
- 이동[i]이 'W'와 같으면 -
- (lft를 1씩 증가)
- 이동[i]이 'E'와 같으면 -
- (lft를 1만큼 감소)
- 이동[i]이 'N'과 같으면 -
- (1씩 증가)
- moves[i]가 'S'와 같은 경우:
- (1씩 감소)
- 이동[i]이 'W'와 같으면 -
- 참을 반환
예시(C++)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool solve(string moves) {
int l = moves.length();
if (l == 0) {
return true;
}
int lft = 0, up = 0;
for (int i = 0; i < l; i++) {
if (moves[i] == 'W') {
lft++;
}
if (moves[i] == 'E') {
lft--;
}
if (moves[i] == 'N') {
up++;
}
if (moves[i] == 'S') {
up--;
}
}
if (lft == 0 && up == 0) {
return true;
}
return false;
}
};
}
main(){
Solution ob;
cout << (ob.solve("EENWWS"));
} 입력
"EENWWS"
출력
1