반응형
728x90
반응형
문제
https://leetcode.com/problems/zigzag-conversion
풀이코드
package SITE03_leetcode.medium;
import java.util.Arrays;
/**
* https://leetcode.com/problems/zigzag-conversion/
*/
public class M006_leetCode6_ZigZagConversion {
private int lo, maxLen;
public static void main(String[] args) {
M006_leetCode6_ZigZagConversion solution = new M006_leetCode6_ZigZagConversion();
System.out.println(solution.convert("PAYPALISHIRING", 4));
}
public String convert(String s, int numRows) {
StringBuilder result = new StringBuilder();
if (numRows == 1) { /* 1 일땐 문자열 그대로 */
return s;
}
/* String to Array */
String[] arr = s.split("");
int[] dp = new int[arr.length];
int index = 0; // 0,1,2,3,2,1,0,1,2,3,2,1,0,1
boolean isAdded = true;
int value = 0;
/* dp array setting */
while (index < arr.length) {
dp[index] = value;
if (value + 1 == numRows) { // value가 최대치면 뺄셈
isAdded = false;
} else if (value == 0) { // value 가 0이면 덧셈
isAdded = true;
}
if (!isAdded) {
value = value - 1;
} else {
value = value + 1;
}
index++;
}
int order = 0;
while (order < numRows) {
for (int i = 0; i < dp.length; i++) {
if (dp[i] == order) { // 0, 1, 2 순으로 찾아서 문자열 append
result.append(arr[i]);
}
}
order++;
}
return result.toString();
}
}
int[] dp는 아래 이미지와 같이 만들고, 0을 가진 index 를 찾아서 append, 그 다음 1을 가진 index 를 찾아서 append 하는 방식이다.
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[leetcode] Medium-11번. Container With Most Water 문제풀이 (0) | 2021.10.26 |
---|---|
[leetcode] Medium-7번. Reverse Integer 문제풀이 (0) | 2021.10.23 |
[leetcode] Medium-4번. median-of-two-sorted-arrays 문제풀이 (0) | 2021.10.20 |
[leetcode] Medium-5번. Longest_Palindromic_Substring 문제풀이 (0) | 2021.10.19 |
[leetcode] Medium-3번. longest-substring-without-repeating-characters 문제풀이 (0) | 2021.10.18 |