์ปจํธ๋กค ์ ํธ โฉ๏ธ
Q. ์ซ์์ "Z"๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ๋ด๊ธด ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋๋ค. ๋ฌธ์์ด์ ์๋ ์ซ์๋ฅผ ์ฐจ๋ก๋๋ก ๋ํ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋ "Z"๊ฐ ๋์ค๋ฉด ๋ฐ๋ก ์ ์ ๋ํ๋ ์ซ์๋ฅผ ๋บ๋ค๋ ๋ป์ ๋๋ค. ์ซ์์ "Z"๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด `s`๊ฐ ์ฃผ์ด์ง ๋, ๋จธ์ฑ์ด๊ฐ ๊ตฌํ ๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด๋ณด์ธ์.
์ ํ์ฌํญ
- 1 ≤ `s`์ ๊ธธ์ด ≤ 200
- -1,000 < `s`์ ์์ ์ค ์ซ์ < 1,000
- `s`๋ ์ซ์, "Z", ๊ณต๋ฐฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- `s`์ ์๋ ์ซ์์ "Z"๋ ์๋ก ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
- ์ฐ์๋ ๊ณต๋ฐฑ์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- 0์ ์ ์ธํ๊ณ ๋ 0์ผ๋ก ์์ํ๋ ์ซ์๋ ์์ต๋๋ค.
- `s`๋ "Z"๋ก ์์ํ์ง ์์ต๋๋ค.
- `s`์ ์์๊ณผ ๋์๋ ๊ณต๋ฐฑ์ด ์์ต๋๋ค.
- "Z"๊ฐ ์ฐ์ํด์ ๋์ค๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
s | result |
"1 2 Z 3" | 4 |
"10 20 30 40" | 100 |
"10 Z 20 Z 1" | 1 |
"10 Z 20 Z" | 0 |
"-1 -2 -3 Z" | -3 |
A.
import re
def solution(s):
answer = []
num = []
new_s = s.split()
pattern = r"^-?\d+(\.\d+)?([eE][-+]?\d+)?$"
for i in new_s:
if re.match(pattern, i):
num.append(int(i))
else:
if num:
num.remove(num[-1])
answer.extend(num)
num = []
if num:
answer.extend(num)
result = sum(answer)
return result
# s ์์ ์๋ ์ซ์๋ฅผ ๋ํ ๊ฐ ๋ฐํํ๊ธฐ
# ๊ทผ๋ฐ ์ด์ Z๋ฅผ ๋ง๋ฌ์ ๋ ๋ฐ๋ก ์ ์ ๋ํ๋ ์ซ์๊ฐ์ ๋นผ์ผํจ
์ฝ๋ ํ์ด ๐ค
์ผ๋จ ๋๋ ์ด ๋ฌธ์ ๋ฅผ ํ ๋ ์จ์ด์๋ ์ซ์์ ๋ง์ (2) ๋ฌธ์ ํ์ด๋ฅผ ๊ทธ๋๋ก ํ์ฉํ์์
def solution(s):
answer = []
num = []
new_s = s.split()
`s`๋ฅผ for ๋ฃจํ๋ก ๋๋ฆฌ๊ธฐ ์ ์ 10์ ์๋ฆฌ ์ซ์๋ค์ด 1์ ์๋ฆฌ ์ซ์์ ๊ฐ์ด
์ผ์ผ์ด ์ชผ๊ฐ์ง๋๊ฑธ(?) ๋ฐฉ์งํ๊ธฐ ์ํด์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก `s`๋ฅผ `split()`ํ์ฌ
`new_s`์ ์ ์ฅํด์ฃผ์์,,
for i in new_s:
if re.match(pattern, i):
num.append(int(i))
else:
if num:
num.remove(num[-1])
answer.extend(num)
num = []
if num:
answer.extend(num)
์ฒจ์ ๋๋ ์ด ๋ถ๋ถ์์ ์ ๊ท์ `re.match()`์ ์ฌ์ฉํ์ง ์๊ณ
`isdigit()`์ ์ฌ์ฉํจ
๊ทธ๋ฌ๋?
์ด ๋ฌธ์ ํ๋ฉด์ ์๊ฒ๋์๋๋ฐ,,
`isdigit()`์ 0์ ํฌํจํ ์์์ธ ์ ์ ์ซ์๋ง True๋ก ๊ฑธ๋ฌ์ค๋ค๋ ์ฌ์ค์ ์๊ฒ๋จ,,
์ด์ฉ์ง,, ๋ง์ง๋ง ์ผ์ด์ค๋ ์์๋ผ ๊ทธ๋ฐ์ง `num`์ ์๋ด๊ธฐ๋๋ผ๊ณ ์,,
๊ทธ๋์ ์์๋ ๊ฒ์ดํด์ค ์ ์๋ ํจ์๊ฐ ๋ญ๊ฐ ์์๊น,,
๊ณ ๋ฏผ์ ๋๋ฆฌ๋ค๊ฐ ์ผ๋ง ์ ์ ์๊ฒ๋ ์ ๊ท์์ด ๋ ์ฌ๋์๋๋ค..
import re
def solution(s):
answer = []
num = []
new_s = s.split()
pattern = r"^-?\d+(\.\d+)?([eE][-+]?\d+)?$"
for i in new_s:
if re.match(pattern, i):
num.append(int(i))
else:
if num:
num.remove(num[-1])
answer.extend(num)
num = []
if num:
answer.extend(num)
result = sum(answer)
return result
์ ๊ท์์ ์ฌ์ฉํ๊ธฐ ์ํด `re` ๋ฅผ ๋ถ๋ฌ์์ค
์์์ ์์, ์ค์, ์ง์ ๋ฑ์ ํฌํจํ ์ซ์๋ค์ ๊ฒ์ดํด์ฃผ๊ธฐ ์ํ ์ ๊ท์์
`pattern`์ ์ ์ฅํด์ฃผ์์
์ ๊ท์์ผ๋ก ์ซ์๋ฅผ ๊ฒ์ดํด์ฃผ๊ธฐ ์ํด `re.match(pattern, i)` ํด์ค๋๋ค
์ฌ๊ธฐ์ ์ ๊น,
re.match()๋?
1. `re.match()` ์ ์
๋ฌธ์์ด์ ์์ ๋ถ๋ถ์ด ์ฃผ์ด์ง ์ ๊ท์ ํจํด๊ณผ ์ผ์นํ๋์ง ํ์ธํ๋๋ฐ ์ฌ์ฉ๋๋ค.
๋ง์ฝ ์ผ์นํ๋ฉด `Match` ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ , ์ผ์นํ์ง ์์ผ๋ฉด `None`์ ๋ฐํํ๋ค.
import re
# ํจํด๊ณผ ๋ฌธ์์ด์ ๋น๊ต
pattern = r"^hello"
string = "hello world"
match = re.match(pattern, string)
if match:
print("์ผ์นํฉ๋๋ค!")
else:
print("์ผ์นํ์ง ์์ต๋๋ค!")
2. `re.match()`์ ์ฃผ์ ํน์ง
- ๋ฌธ์์ด์ ์์ ๋ถ๋ถ๋ง ๊ฒ์ฌ
- `re.match()`๋ ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ์ฃผ์ด์ง ํจํด๊ณผ ์ผ์นํ๋์ง ํ์ธ
- ๋ฌธ์์ด ์ค๊ฐ์ด๋ ๋์ ํจํด์ด ์์ด๋ ๋ฌด์๋๋ค
- ๋ฐํ ๊ฐ
- ์ผ์นํ ๊ฒฝ์ฐ: `Match` ๊ฐ์ฒด๋ฅผ ๋ฐํ
- ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ: `None`์ ๋ฐํ
- `Match` ๊ฐ์ฒด ํ์ฉ
- `Match` ๊ฐ์ฒด๋ ์ผ์นํ๋ ๋ถ๋ถ์ ๋ํ ์ ๋ณด(์์น, ๋ด์ฉ ๋ฑ)๋ฅผ ์ ๊ณต
- ์ฃผ์ ๋ฉ์๋:
- `.group()`: ์ผ์นํ๋ ๋ฌธ์์ด ๋ฐํ
- `.start()`, `.end()`: ์ผ์นํ๋ ๋ถ๋ถ์ ์์ ๋ฐ ๋ ์ธ๋ฑ์ค
- `.span()`: ์์๊ณผ ๋ ์ธ๋ฑ์ค๋ฅผ ํํ๋ก ๋ฐํ
3. ๋งค๊ฐ๋ณ์
`re.match(pattern, string, flags=0)`
- `pattern`: ์ ๊ท์ ํจํด ๋ฌธ์์ด
- `string`: ๊ฒ์ฌํ ๋ฌธ์์ด
- `flags`: ์ ๊ท์ ํ๋๊ทธ (๋์๋ฌธ์ ๊ตฌ๋ถ, ์ฌ๋ฌ ์ค ๋งค์นญ ๋ฑ), ๊ธฐ๋ณธ๊ฐ์ 0
ํ๋๊ทธ ์์:
- `re.IGNORECASE` ๋๋ `re.I`: ๋์๋ฌธ์ ๊ตฌ๋ถ ์์
- `re.MULTILINE` ๋๋ `re.M`: ์ฌ๋ฌ ์ค์์ ์์/๋ ๊ฒ์ฌ๋ฅผ ํ์ฑํ
- `re.DOTALL` ๋๋ `re.S`: ์ค๋ฐ๊ฟ ๋ฌธ์๋ `.`์ ํฌํจ
์์ ์ฝ๋:
1. ๊ธฐ๋ณธ ๋์
import re
# ํจํด๊ณผ ๋ฌธ์์ด ์ ์
pattern = r"hello"
string1 = "hello world"
string2 = "world hello"
# ๋ฌธ์์ด์ ์์ ๋ถ๋ถ ๊ฒ์ฌ
print(re.match(pattern, string1)) # <re.Match object; span=(0, 5), match='hello'>
print(re.match(pattern, string2)) # None
2. `Match` ๊ฐ์ฒด ์ฌ์ฉ
import re
pattern = r"hello"
string = "hello world"
match = re.match(pattern, string)
if match:
print("์ผ์นํ ๋ถ๋ถ:", match.group()) # 'hello'
print("์ผ์น ์์ ์์น:", match.start()) # 0
print("์ผ์น ๋ ์์น:", match.end()) # 5
print("์ผ์น ๋ฒ์:", match.span()) # (0, 5)
3. ํ๋๊ทธ ์ฌ์ฉ (IGNORECASE)
import re
pattern = r"hello"
string = "Hello world"
# ๋์๋ฌธ์ ๋ฌด์
match = re.match(pattern, string, re.IGNORECASE)
if match:
print("๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ์ผ์น:", match.group()) # 'Hello'
4. ์ฃผ์ํ ์
๋ฌธ์์ด ์์ ๋ถ๋ถ๋ง ๊ฒ์ฌ
- ์๋ฅผ ๋ค์ด, ๋ฌธ์์ด ์ค๊ฐ์ ํจํด์ด ์์ด๋ `re.match()`๋ ์ด๋ฅผ ๋ฌด์ํ๋ค
import re
pattern = r"world"
string = "hello world"
print(re.match(pattern, string)) # None
๋ฌธ์์ด์ ์์ ์์น ๊ฒ์ฌ ํ์ ์ `re.search()` ์ฌ์ฉ
- `re.search()`๋ ๋ฌธ์์ด ์ ์ฒด์์ ํจํด์ ๊ฒ์
import re
pattern = r"world"
string = "hello world"
print(re.search(pattern, string)) # <re.Match object; span=(6, 11), match='world'>
5. `re.match()` vs `re.search()` ๋น๊ต
ํน์ฑ | `re.match()` | `re.search()` |
๊ฒ์ฌ ๋ฒ์ | ๋ฌธ์์ด์ ์์ ๋ถ๋ถ๋ง ๊ฒ์ฌ | ๋ฌธ์์ด ์ ์ฒด ๊ฒ์ฌ |
๋ฐํ ๊ฐ | ์ฒซ ๋ฒ์งธ ์ผ์นํ๋ `Match` ๊ฐ์ฒด ๋๋ `None` | ์ฒซ ๋ฒ์งธ ์ผ์นํ๋ `Match` ๊ฐ์ฒด ๋๋ `None` |
์ฃผ์ ์ฉ๋ | ๋ฌธ์์ด์ด ํน์ ํจํด์ผ๋ก ์์ํ๋์ง ํ์ธ | ๋ฌธ์์ด ์์ ํน์ ํจํด์ด ์๋์ง ํ์ธ |
6. ์ค์ํ ์์
์ด๋ฉ์ผ ์ฃผ์ ํ์ธ
import re
# ์ด๋ฉ์ผ ์ฃผ์์ ์์์ด ์ ํจํ์ง ํ์ธ
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
email = "example@email.com"
if re.match(pattern, email):
print("์ ํจํ ์ด๋ฉ์ผ์
๋๋ค!")
else:
print("์ ํจํ์ง ์์ ์ด๋ฉ์ผ์
๋๋ค.")
๊ฒฐ๋ก :
`re.match()`๋ ๋ฌธ์์ด์ ์์ ๋ถ๋ถ๋ง ํ์ธํ ๋ ์ ํฉํ๊ณ , ๋ ์ ์ฐํ ๊ฒ์์ด ํ์ํ ๊ฒฝ์ฐ
`re.search()` ๋๋ `re.findall()`์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค~
์ด์ข๊ฒ `re.match()` ์ฌ์ฉํ๋๋ฐ๋ ์ด๋ฒ ๋ฌธ์ ๋ ํต๊ณผํ์ง๋ง
๋ค์๋ฒ์ ๋ ์ ๊ท์์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๊ทธ๋ฅ `re.findall()`์ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ๋นต์ด์ง ์์ผ๋ ค๋,,?
for i in new_s:
if re.match(pattern, i):
num.append(int(i))
else:
if num:
num.remove(num[-1])
answer.extend(num)
num = []
if num:
answer.extend(num)
result = sum(answer)
return result
๋ค์ ์ฝ๋๋ก ๋์์์,,
`re.match(pattern, i)`๊ฐ `True`์ผ ๊ฒฝ์ฐ:
`num`์ `i`๋ฅผ ์ถ๊ฐํด์ค๋๋ค
`False`์ผ ๊ฒฝ์ฐ(์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ):
์ธ๋ฐ ์ด์ `num`์ ์ซ์๊ฐ ์ฑ์์ ธ์์ ๊ฒฝ์ฐ,,
`num`์ ๋งจ๋ง์ง๋ง์ ์ฑ์์ง ๋ฐ์ดํฐ[-1]๋ฅผ ์ญ์ ํด์ฃผ๊ณ
`answer`์ ์ฎ๊ฒจ๋ด์์ค
๊ทธ๋ฆฌ๊ณ `num` ์ด๊ธฐํ~!
๊ทธ ์ดํ์ ๋ฌธ์์ด์ ๋งจ ๋ง์ง๋ง์๋ ์ซ์๊ฐ ์กด์ฌํด์
`num`์ ์ซ์๊ฐ ์ฑ์์ ธ์์ ๊ฒฝ์ฐ:
๋๊ฐ์ด `answer`์ ์ฎ๊ฒจ๋ด์์ค
๊ทธ๋ฆฌ๊ณ `answer`์ ํฉ๊ณ๋ฅผ returnํด์ค๋๋ค
๋ค๋ฅธ์ฌ๋ ๋ฌธ์ ํ์ด ์ฐธ์กฐํด๋ณด๊ธฐ
# ํ์ฐ๋ ์ฝ๋
def solution(s):
s_list = s.split()
c = 0
while c < len(s_list):
try:
if s_list[c] == 'Z':
del s_list[c-1:c+1]
c -= 1
except IndexError:
pass
c += 1
answer = sum(map(int, s_list))
return answer
ํ์ฐ๋ ์ ๋ฐํ ๋ฐฉ์์ผ๋ก ํธ์ ์ ํ๋ฝ๋งก๊ณ ํผ์์๋๋ค,,,
๋์์๋ฆฌ๋ ๋์ถฉ
์ธ๋ฑ์ค๋ฅผ ์ํํ๋ฉด์ ๊ฒ์ด์ ํ๋๋ฐ
๋ฌธ์์ด์ด ์ซ์์ผ ๊ฒฝ์ฐ ํจ์คํ๊ณ ์ธ๋ฑ์ค ํฌ์ธํฐ๋ฅผ +1 ์ฌ๋ ค์ค๋๋ค
๊ทธ๋ฌ๋ค 'Z'๋ฅผ ๋ง๋๋ฉด ๊ทธ์ ์ซ์์ 'Z'๊น์ง ์ฌ๋ผ์ด์ฑ์ผ๋ก ๊ฐ์ด ์ญ์ ํ ํ,
์ธ๋ฑ์ค ํฌ์ธํฐ๋ฅผ ๋ค์ -1๋ก ์กฐ์ ํ๋ฉด์ ๋ฌธ์์ด ๋๊น์ง ์ฌ์ํํ๋ค~
์ฐ์ ์ด์ฌ๋ ๊ฐ๋ฐ์๋ค~!~!
'Algorithm ๐ > ๋ฌธ์ ํ์ด ๐ฏ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250117] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (2) | 2025.01.17 |
---|---|
[250113] ํ๋ก๊ทธ๋๋จธ์ค ๊ธฐ์ด ํธ๋ ์ด๋ ๋ฌธ์ (0) | 2025.01.13 |
[250108] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (0) | 2025.01.08 |
[250106] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (1) | 2025.01.06 |
[250103] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (3) | 2025.01.03 |