복's
[ LeetCode - 6 ] Zigzag Conversion 본문
https://leetcode.com/problems/zigzag-conversion/description/
Zigzag Conversion - LeetCode
Can you solve this real interview question? Zigzag Conversion - The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I
leetcode.com
처음 문제를 접했을 때는 감도 안잡혔다...ㅎ
종이에 적으면서 규칙을 찾으려고 하다가 찾게 되서 풀게 되었는데 그나마 다행인가 싶다.(시간과 공간 효율은 좋지 않았음)
[ 📌 풀이 ]
1) 2차원 배열은 생성해서 규칙에 맞게 각 글자들을 알맞은 배열방에 삽입한다.
2) 배열의 경계를 만나면 pattern을 변경해서 다른 규칙이 적용되도록 한다.
3) 각 배열의 요소를 합쳐서 return
- 밑으로 내려갈 때는 x값이 1씩 증가한다.
- 위로 올라갈 때는 x값이 1씩 감소하고, y값이 1씩 증가한다.
[ 📌 다른 사람의 풀이 ]
rowNum에 맞춰서 앞 글자를 1부터 시작해서 번호를 부여하다가 rowNum과 동일해지면 1씩 감산해서 번호를 채번하는 방법으로 반복문 한 번에 모두 끝낼 수 있어서 내 코드랑 비교가 불가능함...
이 풀이를 보니까 뭔가 나는 문제를 주어진 그대로만 받아 들여서 아쉽게 풀었나 싶다.
[ 📌 내 코드 - Python ]
"""
# Author : Lee In Bok
# Date : 2023.10.31(Tue)
# Spend Time: 31m 19s
# Runtime : 434 ms (Beats 9.40%)
# Memory : 20.2 MB (Beats 7.56%)
# Algoritm : String
"""
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
arr = [["" for _ in range(len(s) // 2 + 1)] for _ in range(numRows + 1)]
x, y = 0, 0
pattern = True
for ch in s:
arr[x][y] = ch
if pattern:
x += 1
else:
x -= 1
y += 1
if x == numRows -1:
pattern = False
elif x == 0:
pattern = True
ans = ""
for a in arr:
for b in a:
ans += b
return ans
[ 📌 다른 사람 코드 - Python ]
"""
# Author : Someone in LeetCode
# Date : 2023.10.31(Tue)
# Spend Time: (X)
# Runtime : 50 ms (Beats 91.31%)
# Memory : 16.3 MB (Beats 86.43%)
# Algoritm : Copy
"""
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
row_arr = [""] * numRows
idx, up = 0, True
for ch in s:
row_arr[idx] += ch
if idx == numRows - 1:
up = False
elif idx == 0:
up = True
idx += 1 if up else -1
return "".join(row_arr)
[ 📌 결과 ]
'알고리즘 > LeetCode' 카테고리의 다른 글
[ LeetCode - 52 ] N-Queens II (2) | 2023.10.31 |
---|---|
[ LeetCode - 12 ] Integer to Roman (1) | 2023.10.31 |
[ LeetCode - 2 ] Add Two Numbers (0) | 2023.10.30 |
[ LeetCode - 22 ] Generate Parentheses (2) | 2023.10.30 |
[ LeetCode - 42 ] Trapping Rain Water (1) | 2023.10.30 |