반응형
LeetCode 6번 Zigzag Conversion
String
문제

문자열 s가 주어졌을 때, 이를 지그재그 방향으로 나열한 문자열을 출력하는 문제
과정
- 문자열 방향을 정할 변수(direct)와 인덱스 값을 설정할 변수(cnt)가 필요하다.
- 문자열 s를 순회하면서 인덱스가 마지막이거나 처음일 경우에 방향을 바꿔준다.
- 방향에 따라 정방향이면 인덱스에 +1, 역방향이면 인덱스에 -1을 해준다.
- numRows만큼 선언해둔 2차원 배열(data)에 값을 저장하고 이를 문자열로 붙여서 출력해주면 된다.
소스코드
class Solution:
def convert(self, s: str, numRows: int) -> str:
answer = ""
data = [[] for _ in range(numRows)]
cnt, direct = 0, 0
if numRows == 1:
return s
else:
for i in s:
data[cnt].append(i)
if cnt == 0:
direct = 0
cnt += 1
elif cnt == numRows -1:
direct = 1
cnt -= 1
else:
if direct == 0: # 정방향
cnt += 1
if direct == 1: # 역방향
cnt -= 1
for i in data:
zigzag = "".join(i)
answer += zigzag
return answer
다른사람의 풀이를 봤는데 나와 비슷한데 좀 더 간결했다.
나는 방향을 0과 1로 구분했는데 이분은 -1, 1 로 설정해서 인덱스에 방향의 값을 바로 더해주는 방식으로 했다.
그래서 나의 코드에서 cnt += 1, cnt -=1에 해당하는 코드가 불필요 해진다.
class Solution(object):
def convert(self, s, numRows):
if numRows == 1 or numRows >= len(s):
return s
rows = [[] for row in range(numRows)]
index = 0
step = -1
for char in s:
rows[index].append(char)
if index == 0:
step = 1
elif index == numRows - 1:
step = -1
index += step
for i in range(numRows):
rows[i] = ''.join(rows[i])
return ''.join(rows)
통과

// 2023-08-09 스터디 과제
반응형
'코딩테스트 문제풀이 > LeetCode' 카테고리의 다른 글
[LeetCode] 1. Two Sum (0) | 2024.11.07 |
---|---|
[LeetCode] 7. Reverse Integer (1) | 2023.08.08 |
[LeetCode] 5. Longest Palindromic Substring (0) | 2023.07.31 |
[LeetCode] 3. Longest Substring Without Repeating Characters (0) | 2023.07.31 |
[LeetCode] 2. Add Two Numbers (0) | 2023.07.31 |
댓글