Input: s = "PAYPALISHIRING", numRows = 3
이런식으로 변경할 값과 3이 마다 위아래로 움직이는 방식이다.
P A H N
A P L S I I G
Y I R
StringBuffer을 높이 만큼 만든 다음, 높이 0 과 numRows-1 이 되면 반대로 움직이면 StringBuffer안에 넣는다.
그리고 String으로 만들어 리턴을 하면 값이 나옵니다.
public String convert(String s, int numRows) {
if (numRows == 1) return s;
List<StringBuilder> rows = new ArrayList<>();
for (int i = 0; i < Math.min(numRows, s.length()); i++)
rows.add(new StringBuilder());
int curRow = 0;
boolean goingDown = false;
for (char c : s.toCharArray()) {
rows.get(curRow).append(c);
if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
curRow += goingDown ? 1 : -1;
}
StringBuilder ret = new StringBuilder();
for (StringBuilder row : rows) ret.append(row);
return ret.toString();
}
'코딩테스트' 카테고리의 다른 글
[프로그래머스] - 가장 큰 수 (0) | 2022.09.03 |
---|---|
[코딩테스트] 백준 - N번째 큰 수 (0) | 2022.06.19 |
[코딩테스트] 프로그래머스 - 스킬트리 (0) | 2022.06.16 |