"PAYPALISHIIRING" 문자열을 지그재그 패턴으로 쓴다면 다음과 같다.
한 줄씩 읽으면 "PAHNAPLSIIGYIR"이 된다.
문자열과 row 값이 주어지면 이를 지그재그 패턴으로 쓴 뒤의 문자열을 출력하시오.
O(n)으로 해결하는 방법,, 문자열 길이만큼 한번 for문 돌리면서 고정된 길이의 배열에 한 문자씩 담기
ex) 문자열 "abcdefghi" , row = 3인 경우,
a = result[0][0]
b = result[1][0]
c = result[2][0]
d = result[1][1]
e = result[0][1]
...
출력 => "a e i b d f h c g"
주의할 점은 0부터 row-1까지 증감을 반복하기 때문에 인덱스 처리를 따로 해줘야 한다
class Solution {
public:
int findIdx(int i, int row){
int new_row = 2*(row-1);
while(i>=new_row){
i %= new_row;
}
if(i%new_row == 0 ) return 0;
else if(i%new_row == new_row/2) return row-1;
else if(i%new_row < new_row/2) return i;
else{
return new_row-i;
}
}
string convert(string s, int numRows) {
vector<char> result[1001];
string answer="";
int index;
if(numRows==1 || s.length()==1) return s;
for(int i=0; i<s.length(); i++){
index=findIdx(i,numRows);
result[index].push_back(s[i]);
}
for(int k=0; k<numRows; k++){
for(auto itr = result[k].begin(); itr!=result[k].end(); itr++){
answer+=*itr;
}
}
return answer;
}
};
한번에 풀리긴 했는데,, 더 생각해보자