문자열이 " IWANTTOLEARNCODE"와 같다고 가정합니다. 이 문자열은 n이라는 주어진 행 수에 지그재그 방식으로 작성됩니다. 패턴은 다음과 같습니다.
| 나는 | | T | | A | | O |
| W | N | O | E | R | C | D |
| | | L | | N | | E |
"ITAOWNOERCDALNE"
와 같은 줄을 읽을 때따라서 문자열과 행 수를 가져와서 이러한 종류의 작업을 수행할 수 있는 하나의 모듈을 만들어야 합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- n =1이면 s를 반환합니다.
- 크기가 n인 arr의 문자열 배열 생성
- 행 :=0, 아래로 :=참
- 범위 0에서 문자열 크기 - 1에 있는 i의 경우
- 문자열 arr[row] 끝에 s[i] 삽입
- row =b – 1이면 down :=false, 그렇지 않으면 row=0이면 down :=true
- down이 true이면 행을 1씩 증가시키고 그렇지 않으면 행을 1 감소시킵니다.
- ans :=빈 문자열
- 0 ~ n – 1 범위의 i:
- ans :=ans + arr[i]
- 반환
예시(C++)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string convert(string s, int numRows);
};
string Solution::convert(string a, int b) {
if(b == 1)return a;
string arr[b];
int row = 0;
bool down = true;
for(int i = 0; i < a.size(); i++){
arr[row].push_back(a[i]);
if(row == b - 1) down = false;
else if(row == 0)down = true;
if(down) row++;
else row--;
}
string ans = "";
for(int i = 0; i < b; i++){
ans += arr[i];
}
return ans;
}
main(){
Solution ob;
cout << ob.convert("IWANTTOLEARNCODE", 3);
} 입력
"IWANTTOLEARNCODE" 3
출력
"ITECWNTLANOEAORD"