우리가 위치 (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