Skip to content

Commit a353a02

Browse files
committed
solve 3
1 parent f9cabb5 commit a353a02

File tree

3 files changed

+152
-0
lines changed

3 files changed

+152
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from typing import Optional
2+
3+
4+
class ListNode:
5+
def __init__(self, val=0, next=None):
6+
self.val = val
7+
self.next = next
8+
9+
class Solution:
10+
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
11+
head = ListNode()
12+
current = head
13+
14+
while list1 and list2:
15+
if list1.val <= list2.val:
16+
current.next = list1
17+
list1 = list1.next
18+
else:
19+
current.next = list2
20+
list2 = list2.next
21+
22+
current = current.next
23+
24+
current.next = list1 or list2
25+
26+
return head.next
27+
28+
# ์‹œ๊ฐ„ ๋ณต์žก๋„:
29+
# - ๋‘ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋ณ‘ํ•ฉํ•˜๋ฏ€๋กœ O(n + m) => O(n) ์œผ๋กœ ํ‘œํ˜„
30+
# ์—ฌ๊ธฐ์„œ n์€ list1์˜ ๊ธธ์ด, m์€ list2์˜ ๊ธธ์ด.
31+
#
32+
# ๊ณต๊ฐ„ ๋ณต์žก๋„:
33+
# - ๊ธฐ์กด ๋…ธ๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ฏ€๋กœ O(1)

โ€Žmissing-number/pmjuu.pyโ€Ž

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def missingNumber(self, nums: List[int]) -> int:
6+
n = len(nums)
7+
# 0๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆซ์ž์˜ ํ•ฉ์„ ์ˆ˜ํ•™์  ํ•ฉ ๊ณต์‹์„ ์‚ฌ์šฉํ•ด ๊ณ„์‚ฐ
8+
total_sum = n * (n + 1) // 2
9+
10+
return total_sum - sum(nums)
11+
12+
# ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)
13+
# ๊ณต๊ฐ„ ๋ณต์žก๋„ O(1)

โ€Žword-search/pmjuu.pyโ€Ž

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def exist(self, board: List[List[str]], word: str) -> bool:
6+
n, m, word_length = len(board), len(board[0]), len(word)
7+
8+
def search(row, col, word_idx, visited):
9+
# ๊ฒฝ๊ณ„ ์ฒดํฌ
10+
if not (0 <= row < n and 0 <= col < m):
11+
return False
12+
# ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜, ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
13+
if (row, col) in visited or board[row][col] != word[word_idx]:
14+
return False
15+
16+
# ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ
17+
if word_idx == word_length - 1:
18+
return True
19+
20+
# ํ˜„์žฌ ์…€์„ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ
21+
visited.add((row, col))
22+
23+
# ์ธ์ ‘ํ•œ ์…€ ํ™•์ธ
24+
found = (
25+
search(row - 1, col, word_idx + 1, visited) or
26+
search(row + 1, col, word_idx + 1, visited) or
27+
search(row, col - 1, word_idx + 1, visited) or
28+
search(row, col + 1, word_idx + 1, visited)
29+
)
30+
# ํ˜„์žฌ ์…€ ๋ฐฉ๋ฌธ ํ•ด์ œ (๋ฐฑํŠธ๋ž˜ํ‚น)
31+
visited.remove((row, col))
32+
33+
return found
34+
35+
# ๋ชจ๋“  ์…€์—์„œ ํƒ์ƒ‰ ์‹œ์ž‘
36+
for row in range(n):
37+
for col in range(m):
38+
if board[row][col] == word[0]:
39+
if search(row, col, 0, set()):
40+
return True
41+
42+
return False
43+
44+
# ํ’€์ด 1: ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ Set์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
45+
# ์‹œ๊ฐ„ ๋ณต์žก๋„:
46+
# - ๊ฐ ์…€์—์„œ DFS๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ, ๊ฐ DFS๋Š” ์ตœ๋Œ€ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ word์˜ ๊ธธ์ด๋งŒํผ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ง„ํ–‰ํ•จ.
47+
# - ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n * 4^k), ์—ฌ๊ธฐ์„œ n์€ ์ „์ฒด ์…€์˜ ๊ฐœ์ˆ˜, k๋Š” word์˜ ๊ธธ์ด.
48+
# ๊ณต๊ฐ„ ๋ณต์žก๋„:
49+
# - visited Set ์‚ฌ์šฉ: O(k), ์—ฌ๊ธฐ์„œ k๋Š” word์˜ ๊ธธ์ด.
50+
# - ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ: O(k), word์˜ ๊ธธ์ด๋งŒํผ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์Œ“์ž„.
51+
# => ์ด ๊ณต๊ฐ„ ๋ณต์žก๋„: O(k)
52+
53+
54+
class Solution:
55+
def exist(self, board: list[list[str]], word: str) -> bool:
56+
n, m = len(board), len(board[0])
57+
word_length = len(word)
58+
59+
# ์กฐ๊ธฐ ์ข…๋ฃŒ: board์— word๋ฅผ ๊ตฌ์„ฑํ•  ์ถฉ๋ถ„ํ•œ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
60+
from collections import Counter
61+
board_counter = Counter(char for row in board for char in row)
62+
word_counter = Counter(word)
63+
if any(word_counter[char] > board_counter[char] for char in word_counter):
64+
return False
65+
66+
def search(row, col, idx):
67+
# ๊ธฐ๋ณธ ์กฐ๊ฑด: ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•œ ๊ฒฝ์šฐ
68+
if idx == word_length:
69+
return True
70+
71+
# ๊ฒฝ๊ณ„ ์กฐ๊ฑด ๋ฐ ๋ฌธ์ž ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ
72+
if row < 0 or row >= n or col < 0 or col >= m or board[row][col] != word[idx]:
73+
return False
74+
75+
# ํ˜„์žฌ ์…€์„ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ์ž„์‹œ ํ‘œ์‹œ
76+
temp = board[row][col]
77+
board[row][col] = "#"
78+
79+
# ๋ชจ๋“  ๋ฐฉํ–ฅ ํƒ์ƒ‰
80+
found = (
81+
search(row - 1, col, idx + 1) or
82+
search(row + 1, col, idx + 1) or
83+
search(row, col - 1, idx + 1) or
84+
search(row, col + 1, idx + 1)
85+
)
86+
87+
# ํƒ์ƒ‰ ํ›„ ์…€ ๋ณต์›
88+
board[row][col] = temp
89+
return found
90+
91+
# ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ์…€์—์„œ DFS ์‹œ์ž‘
92+
for i in range(n):
93+
for j in range(m):
94+
if board[i][j] == word[0] and search(i, j, 0):
95+
return True
96+
97+
return False
98+
99+
# ํ’€์ด 2: Board๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๊ด€๋ฆฌ
100+
# ์‹œ๊ฐ„ ๋ณต์žก๋„:
101+
# - ๊ฐ ์…€์—์„œ DFS๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ตœ๋Œ€ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ word์˜ ๊ธธ์ด๋งŒํผ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ง„ํ–‰ํ•จ.
102+
# - ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n * 4^k), ์—ฌ๊ธฐ์„œ n์€ ์ „์ฒด ์…€์˜ ๊ฐœ์ˆ˜, k๋Š” word์˜ ๊ธธ์ด.
103+
# ๊ณต๊ฐ„ ๋ณต์žก๋„:
104+
# - ์ถ”๊ฐ€ ๊ณต๊ฐ„ ์‚ฌ์šฉ ์—†์ด Board๋ฅผ ์ง์ ‘ ์ˆ˜์ •: O(1).
105+
# - ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ: O(k), word์˜ ๊ธธ์ด๋งŒํผ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์Œ“์ž„.
106+
# => ์ด ๊ณต๊ฐ„ ๋ณต์žก๋„: O(k)

0 commit comments

Comments
ย (0)