문자열이 " 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"