728x90
반응형
문제 설명
1. 문자열이 주어진다.
2. 지그재그 이동할 숫자가 주어진다.
3. 지그재그 하고 문자열 변경하면 된다.
풀이 과정
- 지그재그보다는 위아래? 라고 생각하면 쉽다.
P A H N
A P L S I I G
Y I R
1. 보면 만들어지는 순서가 1 2 3 2 1 2 3 2 1 2 3 ... 이렇게 된다.
2. 그러면 Queue 배열을 만들어서 q1(PAHN) q2(APLSIIG) q3(YIR) 이렇게 두고 합쳐주면 바로 풀린다.
3. 위아래 슉 슈슉 슉
코드
class Solution {
public String convert(String s, int numRows) {
// 위의 경우에는 지그재그가 애초에 안나온다.
if(numRows == 1 || numRows >= s.length()) {
return s;
}
StringBuilder sb = new StringBuilder();
int index = 0; // 얘는 어디 위치인지를 알기위한 index
boolean isForward = true; // 지그재그로 가면서 위치를 정하는데 위아래를 정하기 위한 bool
Queue<Character>[] queues = new Queue[numRows]; // 지그재그 문자열의 현 문자가 어디인지를 확인하기 위한 큐 배열
for (int i = 0; i < queues.length; i++) {
queues[i] = new LinkedList<>();
}
for(int i=0; i<s.length(); i++) {
queues[index].add(s.charAt(i)); // 현 위치는 어디 위치인지를 저장한다.
// 지그재그 방향에 따라 들어갈 queue 위치 확인
if(isForward) index++;
else index--;
// 지그재그 위아래 이동
if(index == 0) isForward = true;
else if(index == numRows-1) isForward = false;
}
// 문자열 생성해주기
for(int i=0; i<numRows; i++) {
while(!queues[i].isEmpty()) {
sb.append(queues[i].remove());
}
}
return sb.toString();
}
}
반응형
'알고리즘 공부' 카테고리의 다른 글
[leetcode - 11. Container With Most Water] java (0) | 2025.02.05 |
---|---|
[leetcode - 167. Two Sum II - Input Array Is Sorted] java (0) | 2025.02.05 |
[백준 22866번] 탑 보기 - java (0) | 2025.01.31 |
[leetcode - 68. Text Justification] java (0) | 2025.01.31 |
[leetcode - 42. Trapping Rain Water] java (0) | 2025.01.30 |