Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 지그재그 변환


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