์จ์ด์๋ ์ซ์์ ๋ง์ 2๏ธโฃ
Q. ๋ฌธ์์ด `my_string` ์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. `my_string` ์ ์๋ฌธ์, ๋๋ฌธ์, ์์ฐ์๋ก๋ง ๊ตฌ์ฑ๋์ด์์ต๋๋ค.
`my_string` ์์ ์์ฐ์๋ค์ ํฉ์ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 ≤ `my_string`์ ๊ธธ์ด ≤ 1,000
- 1 ≤ `my_string` ์์ ์์ฐ์ ≤ 1000
- ์ฐ์๋ ์๋ ํ๋์ ์ซ์๋ก ๊ฐ์ฃผํฉ๋๋ค.
- 000123๊ณผ ๊ฐ์ด 0์ด ์ ํํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
- ๋ฌธ์์ด์ ์์ฐ์๊ฐ ์๋ ๊ฒฝ์ฐ 0์ return ํด์ฃผ์ธ์.
์ ์ถ๋ ฅ ์
my_string | result |
'aAb1B2cC34oOp' | 37 |
'1a2b3c4d123Z' | 133 |
A.
def solution(my_string):
answer = 0
num = ''
for my_str in my_string:
if my_str.isdigit(): # my_str์ด ์ซ์์ธ ๊ฒฝ์ฐ
num += my_str # num์ my_str ์ ์ฅ
else: # ์ซ์๊ฐ ์๋ my_str์ ๋ง๋ฌ์ ๊ฒฝ์ฐ
if num: # num์ ์ ์ฅ๋ผ์๋ ์ซ์๊ฐ ์๋ค๋ฉด
answer += int(num) # answer์ ์ ์๋ก ๋ณํํ์ฌ ์ ์ฅ
num = '' # ๋ค์ if๋ฌธ์ ๋ฐ๋ณต๋์ ํ๊ธฐ์ํ ๋ณ์ ์ด๊ธฐํ
if num: # ๋งจ๋ง์ง๋ง ๋ฌธ์์ด์๋ ์ซ์๊ฐ ์์ด์ num์ ์ซ์๊ฐ ์ ์ฅ๋ ๊ฒฝ์ฐ
answer += int(num) # answer์ ์ ์ ๋ณํ ์ ์ฅ
return answer
์ค๋ต๋ ธํธ ๋ค์ด๊ฐ๊ธฐ ์ ์,,, โฟ
์ผ๋จ ์ค๋ ์์นจ ๋๋ ๊ต์ฅํ ๋น๋ชฝ์ฌ๋ชฝํ ์ํ๋ก ์ฝ๋ํ์ด์ ์ํ๋๋ฐ,,,
์ค๋ ๋ฌธ์ ๋ฅผ ์ด ์ ์ ํ์๋ ์จ์ด์๋ ์ซ์์ ๋ง์ (1) ๊ณผ ๋น์ทํ ๋ฐฉํฅ์ผ๋ก ํ๋ฉด ๋๊ฒ ์ง(์ค๋์ ๋๋ฌด ์กธ๋ ค์ ๋ฌธ์ ์ ๋๋ก ๋ชป๋ด)
๋ผ๊ณ ์๊ฐํ๊ณ ?
def solution(my_string):
answer = 0
numbers = '0123456789'
for my_str in my_string:
if my_str in numbers:
answer += int(my_str)
return answer
๋ฌธ์ ๋ฅผ ์ด๋ ๊ฒ ํ์ด๋ฒ๋ฆฐ ๊ฒ์,,
๊ทผ๋ฐ ์ฝ๋์คํ ์ํค๊ณ ๋์
์คํ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๊ธฐ๋๊ฐ๊ณผ ๋ค๋ฆ ๋๋ค. ๋ฉํธ ๋ณด๊ณ
์? ๋ฌธ์ ๊ฐ ์ด๊ฒ ์๋์๋ค? ํ๊ณ ๋ถ๋ด๋ถ๋ด ๋ค์ ๋ถ์ํจ
๊ทธ๋ฌ๋ n์ฃผ์งธ ์ ์ ์งง์ผ๋ฉด 3์๊ฐ, ํ๊ท 4-5์๊ฐ๋ฐ์ ๋ชป์์
๋์ ํผ๋ก๊ฐ์ด ๊ฐmax๋ฅผ ์ฐ์ด๋ฒ๋ฆฐ ์ค๋,,,
๋จธ๋ฆฌ๊ฐ ๋์ ํ ๊ตด๋ฌ๊ฐ์ง ์์์ ใ ใ ใ
๊ทธ๋๋ถํฐ ์์๋ ๋์ ๋ฌผ์ํ ์ด์ธ๋ง์ง,,,
์ค๋ต๋ ธํธ โ๏ธ
์ง์ ์ ์:
import re # ์ ๊ท์์ ์ฌ์ฉํ๊ธฐ ์ํ re import
def solution(my_string):
# ์ ๊ท์์ ์ฌ์ฉํ์ฌ ์ซ์ ์ถ์ถ
numbers = re.findall(r'\d+', my_string) # re.findall(r'\d+',my_string)์ my_string๋ฌธ์์ด์์ ํ๋ ์ด์์ ์ซ์๋ฅผ ์ฐพ๊ฒ ๋ค๋ ์๋ฏธ, ์ ์์ฒด๊ฐ ์ซ์๋ฅผ ๊ฒ์ดํ๋ ํจํด์ธ ์
# ์ซ์๋ฅผ ์ ์๋ก ๋ณํํ๊ณ ํฉ์ฐ
total = sum(map(int, numbers))
return total
๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ:
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฃผ์ ๋จ๊ณ๋ฅผ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ์ ๊ท์์ ์ด์ฉํ ์ซ์ ์ถ์ถ~!@!$@&
q. ์ ๊ท์์ด ๋ญ๋ฐ?
์ ๊ท์(Regular Expression = RegEx)์
๋ฌธ์์ด์์ ํน์ ํ ํจํด์ ๊ฒ์ํ๊ฑฐ๋, ์ถ์ถํ๊ฑฐ๋, ๋์ฒดํ ์ ์๋๋ก
๋์์ฃผ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค~@#%$&
์ ๊ท์์ ์ฃผ์ ์ฉ๋
ํน์ ๋ฌธ์์ด ํจํด ๊ฒ์
- ์: ๋ฌธ์ฅ(= ๋ฌธ์์ด) ์์ ์ซ์๊ฐ ํฌํจ๋์ด ์๋์ง?
๋ฌธ์์ด์์ ๋ฐ์ดํฐ ์ถ์ถ
- ์: ์ ํ๋ฒํธ, ์ด๋ฉ์ผ ์ฃผ์, ์ฐํธ๋ฒํธ ๋ฑ์ ํ ์คํธ์์ ์ฐพ์์ ์ถ์ถ
๋ฌธ์์ด ๋์ฒด
- ์: ๋ฌธ์์ด์์ ํน์ ๋จ์ด๋ฅผ ๋ค๋ฅธ ๋จ์ด๋ก ๋์ฒด
๋ฌธ์์ด ์ ํจ์ฑ ๊ฒ์ฌ
- ์: ์ด๋ฉ์ผ ํ์์ด ์ฌ๋ฐ๋ฅธ์ง, ๋น๋ฐ๋ฒํธ๊ฐ ์กฐ๊ฑด์ ๋ง๋์ง ๋ฑ์ ํ์ธ
์ ๊ท์์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์
์ ๊ท์์ ํน์ ๋ฌธ์์ ๊ท์น์ ์ฌ์ฉํด ํจํด์ ํํํฉ๋๋ค. ์๋๋ ์ฃผ์ ์ ๊ท์ ์์์ ๋๋ค.
๋ฌธ์ ๊ด๋ จ
- `.`: ์์์ ํ ๋ฌธ์
- ์: `a.b` >> 'a' ์ 'b' ์ฌ์ด์ ์๋ฌด ๋ฌธ์๋ ์ค๋ ๋ฌธ์์ด๊ณผ ๋งค์นญ(`aab`, `acb` ๋ฑ)
- `[]`: ๋๊ดํธ ์์ ์๋ ๋ฌธ์ ์ค ํ๋
- ์: `[abc]` >> 'a', 'b', 'c' ์ค ํ๋์ ๋งค์นญ
- `[^ ]`: ๋๊ดํธ ์์ ์๋ ๋ฌธ์
- ์: `[^0-9]` >> ์ซ์๊ฐ ์๋ ๋ฌธ์์ ๋งค์นญ
์๋ ๊ด๋ จ
- `*`: 0ํ ์ด์ ๋ฐ๋ณต
- ์: `a*` >> 'a'๊ฐ 0๋ฒ ์ด์ ๋ฐ๋ณต(, a, aa, aaa ๋ฑ)
- `+`: 1ํ ์ด์ ๋ฐ๋ณต
- ์: `a+` >> 'a'๊ฐ 1๋ฒ ์ด์ ๋ฐ๋ณต(a, aa, aaa ๋ฑ)
- `?`: 0ํ ๋๋ 1ํ ๋ฐ๋ณต
- ์: `ab?` >> 'a' ๋ค์ 'b'๊ฐ 0๋ฒ ๋๋ 1๋ฒ ์ค๋ ๋ฌธ์์ด๊ณผ ๋งค์นญ( a, ab)
- `{n}`: ์ ํํ n๋ฒ ๋ฐ๋ณต
- ์: `a{3}` >> 'a'๊ฐ ์ ํํ 3๋ฒ ๋ฐ๋ณต(aaa)
- `{n,m}`:์ต์ n๋ฒ, ์ต๋ m๋ฒ ๋ฐ๋ณต
- ์: `a{2, 4}` >> 'a'๊ฐ ์ต์ 2๋ฒ, ์ต๋ 4๋ฒ ๋ฐ๋ณต(aa, aaa, aaaa)
์ซ์์ ๋ฌธ์ ์ข ๋ฅ ๊ด๋ จ
- `\d`: ์ซ์(0-9)
- ์: `\d+` >> ํ๋ ์ด์์ ์ซ์
- `\D`: ์ซ์๊ฐ ์๋ ๋ฌธ์
- ์: `\D+` >> ์ซ์๊ฐ ์๋ ๋ฌธ์์ด
- `\w`: ๋ฌธ์, ์ซ์, ๋ฐ์ค(_)
- ์: `\w+` >> ์ํ๋ฒณ/ ์ซ์/ ๋ฐ์ค๋ก ์ด๋ค์ง ๋ฌธ์์ด
- `\W`: ๋ฌธ์, ์ซ์, ๋ฐ์ค์ด ์๋ ๊ฒ
- ์: `\W+` >> ํน์ ๋ฌธ์๋ ๊ณต๋ฐฑ
- `\s`: ๊ณต๋ฐฑ ๋ฌธ์(์คํ์ด์ค, ํญ ๋ฑ)
- ์: `\s+` >> ํ๋ ์ด์์ ๊ณต๋ฐฑ
- `\S`: ๊ณต๋ฐฑ์ด ์๋ ๋ฌธ์
- ์: `\S+` >> ๊ณต๋ฐฑ์ด ์๋ ๋ฌธ์์ด
์ ๊ท์ ์์
1. ์ด๋ฉ์ผ ์ฃผ์ ์ถ์ถ
import re
text = "Contact us at support@example.com or sales@company.org"
pattern = r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b'
emails = re.findall(pattern, text)
print(emails) # ['support@example.com', 'sales@company.org']
2. ์ซ์ ์ถ์ถ
import re
text = "Order 1234, shipped on 2023-01-01."
pattern = r'\d+'
numbers = re.findall(pattern, text)
print(numbers) # ['1234', '2023', '01', '01']
3. ๋ฌธ์์ด ๋์ฒด
import re
text = "The color is red."
pattern = r'red'
replacement = 'blue'
new_text = re.sub(pattern, replacement, text)
print(new_text) # "The color is blue."
q. r'\d+'์์ r์ ๋ญ ์๋ฏธํ๋๊ฑฐ์ผ? ์๋ต ์์ด ๊ผญ ์จ์ค์ผํด?
**`r`**์ **raw string**์ ๋ํ๋ด๋ ์ ๋์ฌ์ ๋๋ค.
raw string์ ๋ฌธ์์ด ์์ ์๋ ๋ฐฑ์ฌ๋์(`\`)๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ง ์๊ณ
์๋ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
q. ์ด์ค์ผ์ดํ๊ฐ ๋ญ๋ฐ?
**์ด์ค์ผ์ดํ(Escape)**๋ ํ๋ก๊ทธ๋๋ฐ์์ ํน์ ๋ฌธ์๋ฅผ
ํน๋ณํ ์๋ฏธ๋ก ํด์ํ์ง ์๊ฑฐ๋ ๋ฌธ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋๋ก
๋ง๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฃผ๋ก **๋ฐฑ์ฌ๋์(`\`)**๋ฅผ ์ฌ์ฉํ์ฌ ํน๋ณํ ๋์์ ๋ณ๊ฒฝํ๊ฑฐ๋~#$^$%^&
์ด์ค์ผ์ดํ์ ํ์์ฑ
์ปดํจํฐ ์ธ์ด์์ ํน์ ๋ฌธ์๋ค์ ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด:
- `"`์ `'`๋ ๋ฌธ์์ด์ ์์๊ณผ ๋์ ๋ํ๋ ๋๋ค.
- `\n`์ ์ค๋ฐ๊ฟ(Newline)์ ์๋ฏธํฉ๋๋ค.
- `\t`๋ ํญ(Tab)์ ์๋ฏธํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์๋ฅผ ๋ฌธ์์ด ์์์ ๋ฌธ์ ๊ทธ๋๋ก ํํํ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ด์ค์ผ์ดํ๊ฐ ํ์ํฉ๋๋ค.
์ด์ค์ผ์ดํ ๋ฌธ์์ ์
ํน๋ณํ ๋์์ ํ๋ ๋ฌธ์๋ค
- `\n`: ์ค๋ฐ๊ฟ
- `\t`: ํญ
- `\"`: ํฐ๋ฐ์ดํ๋ฅผ ๋ฌธ์์ด ์์์ ๋ฌธ์๋ก ์ฌ์ฉ
- `\'`: ์์๋ฐ์ดํ๋ฅผ ๋ฌธ์์ด ์์์ ๋ฌธ์๋ก ์ฌ์ฉ
- `\\`: ๋ฐฑ์ฌ๋์ ์์ฒด๋ฅผ ๋ฌธ์๋ก ์ฌ์ฉ
์์ :
print("Hello\nWorld") # ์ค๋ฐ๊ฟ
# ์ถ๋ ฅ:
# Hello
# World
print("Tab\tSpace") # ํญ
# ์ถ๋ ฅ:
# Tab Space
print("He said, \"Hello!\"") # ํฐ๋ฐ์ดํ ํฌํจ
# ์ถ๋ ฅ:
# He said, "Hello!"
print('It\'s a sunny day') # ์์๋ฐ์ดํ ํฌํจ
# ์ถ๋ ฅ:
# It's a sunny day
๋ฌธ์ ๊ทธ๋๋ก ์ถ๋ ฅํ๊ธฐ
์ด์ค์ผ์ดํ๊ฐ ํ์ํ ๋ฌธ์๋ฅผ ๋ฌธ์์ด ์์์ ๋ฌธ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ฐฑ์ฌ๋์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์์ :
# ๋ฐฑ์ฌ๋์๋ฅผ ๋ฌธ์๋ก ์ฌ์ฉํ๊ธฐ
print("This is a backslash: \\")
# ์ถ๋ ฅ: This is a backslash: \
# ํฐ๋ฐ์ดํ๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด
print("\"Python is fun!\"")
# ์ถ๋ ฅ: "Python is fun!"
์ด์ค์ผ์ดํ์ ์ ๊ท์
์ ๊ท์์์๋ ๋ฐฑ์ฌ๋์(`\`)๊ฐ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ํน๋ณํ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
- `\d`: ์ซ์๋ฅผ ์๋ฏธ
- `\s`: ๊ณต๋ฐฑ์ ์๋ฏธ
- `\w`: ๋จ์ด ๋ฌธ์๋ฅผ ์๋ฏธ
์ด๋ฌํ ์ ๊ท์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ๋ Python ๋ฌธ์์ด์์ ์ถ๊ฐ์ ์ธ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
์์ :
import re
# ์ซ์๋ง ์ฐพ๊ธฐ
result = re.findall(r"\d+", "There are 123 apples.")
print(result) # ['123']
์ด์ค์ผ์ดํ๊ฐ ํ์ํ์ง ์๋๋ก ํ๋ ๋ฐฉ๋ฒ
Python์์๋ ๋ฌธ์์ด ์์ **`r`**์ ๋ถ์ฌ raw string์ผ๋ก ์ฒ๋ฆฌํ๋ฉด, ๋ฐฑ์ฌ๋์๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ง ์๊ณ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ :
# ์ผ๋ฐ ๋ฌธ์์ด์์๋ \\d+๋ก ์์ฑ
pattern = "\\d+" # ๋ฐฑ์ฌ๋์๋ฅผ ๋ ๋ฒ ์ฌ์ฉํด์ผ ํจ
print(re.findall(pattern, "123abc")) # ['123']
# raw string์์๋ r'\d+'๋ก ์์ฑ
pattern = r"\d+" # ๋ฐฑ์ฌ๋์ ํ ๋ฒ๋ง ์ฌ์ฉ
print(re.findall(pattern, "123abc")) # ['123']
์ ๋ฆฌ
- ์ด์ค์ผ์ดํ์ ์ญํ : ํน์ ๋ฌธ์๋ฅผ ํน๋ณํ ์๋ฏธ๋ก ํด์ํ์ง ์๊ฑฐ๋ ๋ฌธ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋๋ก ํจ.
- ๋ํ์ ์ธ ์ด์ค์ผ์ดํ ๋ฌธ์: `\n` (์ค๋ฐ๊ฟ), `\t` (ํญ), `\\` (๋ฐฑ์ฌ๋์), `\"` (ํฐ๋ฐ์ดํ).
- ์ ๊ท์์์ ์ด์ค์ผ์ดํ: `\d`, `\s` ๋ฑ์์ ๋ฐฑ์ฌ๋์๊ฐ ํ์ํ๋ฉฐ, raw string์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค.
- ์ฌ์ฉ ๋ฐฉ๋ฒ: ์ด์ค์ผ์ดํ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ํ์ฑ์ ์ํด ์ํฉ์ ๋ฐ๋ผ ๊ผญ ์ฌ์ฉํด์ผ ํ๋ค.
์ raw string์ด ํ์ํ๊ฐ?
Python์์ ๋ฌธ์์ด ์์ ๋ฐฑ์ฌ๋์(`\`)๋ ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค.
์๋ฅผ ๋ค์ด:
- `\n`์ ์ค๋ฐ๊ฟ(Newline)์ ์๋ฏธ.
- `\t`๋ ํญ(Tab)์ ์๋ฏธ.
์ ๊ท์์๋ `\d`, `\s`, `\w` ๊ฐ์ ํจํด์์ ๋ฐฑ์ฌ๋์๊ฐ ํ์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ด ๊ฒฝ์ฐ Python์ด ๋ฐฑ์ฌ๋์๋ฅผ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์, ์ ๊ท์์์๋ raw string์ ์ฌ์ฉํ์ฌ
๋ฐฑ์ฌ๋์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋๋ก ์ง์ ํ๋ ๊ฒ์ ๋๋ค.
raw string์ ์๋ตํ ์ ์๋?
์๋ตํ ์๋ ์์ง๋ง, ์ ๊ท์์์ ๋ฐฑ์ฌ๋์๋ฅผ ์ธ ๋๋ง๋ค ์ด์ค์ผ์ดํ๋ฅผ ๋ ๋ฒ ํด์ผ ํ๋ฏ๋ก ๋ณต์กํ๊ณ ์ค์ํ๊ธฐ ์ฝ์ต๋๋ค.
๋ฐ๋ผ์ ์ ๊ท์์ ์์ฑํ ๋๋ ํญ์ raw string์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
์ ๋ฆฌ
- `r`์ ์๋ฏธ: ๋ฌธ์์ด์ raw string์ผ๋ก ์ฒ๋ฆฌํ์ฌ, ๋ฐฑ์ฌ๋์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
- ์๋ต ๊ฐ๋ฅ ์ฌ๋ถ: ์๋ต ๊ฐ๋ฅํ์ง๋ง, ๋ณต์กํ ์ ๊ท์์์๋ ์ค์ํ ๊ฐ๋ฅ์ฑ์ด ํฌ๊ธฐ ๋๋ฌธ์ ์๋ตํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
- ๊ถ์ฅ: ์ ๊ท์์์๋ ํญ์ `r`์ ๋ถ์ฌ raw string์ ์ฌ์ฉํ๋ ์ต๊ด์ ๋ค์ด๋ ๊ฒ์ด ์ข๋ค.
q. ๊ทธ๋ฌ๋ฉด ์ ๊ท์ ๋ง๊ณ ๊ทธ๋ฅ for ๋ฃจํ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ด?
์ ๊ท์์ ์ฌ์ฉํ์ง ์๊ณ `for` ๋ฃจํ๋ฅผ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๋ ์์ต๋๋ค.
๋ฌธ์์ด์ ํ๋์ฉ ์ํํ๋ฉฐ ์ซ์๋ฅผ ๊ฐ์งํ๊ณ ,
์ซ์๊ฐ ์ฐ์ํด์ ๋ํ๋๋ฉด ํ๋์ ์์ฐ์๋ก ์ฒ๋ฆฌํ์ฌ ํฉ์ ๊ตฌํ๋ฉด ๋ฉ๋๋ค.
def solution(my_string):
total = 0
num = "" # ์ซ์๋ฅผ ์์๋ก ์ ์ฅํ ๋ณ์
for char in my_string:
if char.isdigit(): # ๋ฌธ์๊ฐ ์ซ์์ธ ๊ฒฝ์ฐ
num += char # ์ซ์๋ฅผ ์ด์ด๋ถ์
else:
if num: # ์ซ์๊ฐ ์ ์ฅ๋์ด ์๋ค๋ฉด
total += int(num) # ์ซ์๋ก ๋ณํ ํ ํฉ์ฐ
num = "" # ์์ ๋ณ์ ์ด๊ธฐํ
# ๋ฌธ์์ด ๋์ ์ซ์๊ฐ ์์ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
if num:
total += int(num)
return total
์ฝ๋ ๋์ ์๋ฆฌ
์ซ์๋ฅผ ์ฐพ์ ์ ์ฅํ๊ธฐ
๋ฌธ์์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ์ผ๋ฉด์, ์ซ์๊ฐ ๋์ค๋ฉด ์์๋ก ์ ์ฅํฉ๋๋ค.
์: `"aAb1B2cC34oOp"`
- `'1'`์ด ๋์ค๋ฉด ์์๋ก `num`์ `'1'`์ ์ ์ฅ.
- `'2'`์ด ๋์ค๋ฉด ์์๋ก `num`์ `'2'`๋ฅผ ์ ์ฅ.
- `'34'`์ด ๋์ค๋ฉด ์์๋ก `num`์ `'34'`๋ฅผ ์ ์ฅ.
์ซ์๊ฐ ๋๋๋ฉด ๋ํ๊ธฐ
์ซ์๊ฐ ์๋ ๋ฌธ์๊ฐ ๋์ค๋ฉด, ์ง๊ธ๊น์ง ์ ์ฅํ ์ซ์๋ฅผ ํฉ๊ณ์ ๋ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, `'1'`์ ๋ง๋ฌ๋ค๊ฐ ๋ฌธ์๋ฅผ ๋ง๋๋ฉด `total += 1`.
- ์ดํ `'34'`๋ฅผ ๋ง๋๋ฉด `total += 34`.
๋ง์ง๋ง ์ซ์ ์ฒ๋ฆฌ
๋ฌธ์์ด์ด ๋๋ฌ์ ๋ ๋ง์ง๋ง์ ๋จ์ ์๋ ์ซ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ์: `'34'`๊ฐ ๋์ ์์ผ๋ฉด `total += 34`.
๋ฐํํ๊ธฐ
๋ชจ๋ ์ซ์๋ฅผ ๋ํ ํฉ๊ณ๋ฅผ ๋ฐํํฉ๋๋ค.
q. char์ 34๊ฐ ์์ผ๋ฉด 3๊ณผ 4๋ฅผ ๋ฐ๋ก๋ฐ๋ก ์๋ณด๊ณ ํ๋์ ์ซ์๋ก ๋ณด๋๊ฑฐ์ผ? ์๋ฆฌ๊ฐ ๋ญ๋ฐ?
`char`์์ ์ซ์๋ฅผ ์ฝ์ ๋ ์ฐ์๋ ์ซ์๋ฅผ ํ๋์ ์ซ์๋ก ๋ณด๋ ์ด์ ๋ ์ซ์๋ฅผ ์ด์ด ๋ถ์ด๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฝ๋์์ ์ฐ์๋ ์ซ์๋ฅผ ํ์ธํ๋ฉด์ `num`์ด๋ผ๋ ์์ ๋ณ์์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ `'34'` ๊ฐ์ ์ฐ์๋ ์ซ์๊ฐ `'3'`๊ณผ `'4'`๋ก ๋๋์ง ์๊ณ ํ๋์ ์ซ์ `34`๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์๋ฆฌ
- ๋ฌธ์์ด์ ํ๋์ฉ ํ์ธํฉ๋๋ค.
- ๋ฌธ์๋ฅผ ํ๋์ฉ ์ฝ์ผ๋ฉด์, ์ซ์์ธ์ง ์๋์ง๋ฅผ ํ์ธํฉ๋๋ค.
- ์ซ์๋ผ๋ฉด ๊ธฐ์กด์ ์ ์ฅ๋ ์ซ์์ ์ด์ด๋ถ์ด๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
- ์ฐ์๋ ์ซ์๋ ์ด์ด๋ถ์
- ์๋ฅผ ๋ค์ด `'3'`์ ์ฝ๊ณ , ๋ค์์ `'4'`๋ฅผ ์ฝ์ผ๋ฉด `'3' + '4' = '34'`๊ฐ ๋ฉ๋๋ค.
- ์ด๋ ๊ฒ ํด์ ์ซ์๊ฐ ์ฐ์์ ์ผ๋ก ๋์ค๋ ๊ฒฝ์ฐ ํ๋์ ์ซ์๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ซ์๊ฐ ๋๋๋ ์กฐ๊ฑด์์ ์ฒ๋ฆฌ
- ์ฐ์๋ ์ซ์๊ฐ ๋๋๋ ์์ , ์ฆ ์ซ์๊ฐ ์๋ ๋ฌธ์๋ฅผ ๋ง๋๋ฉด ์ง๊ธ๊น์ง ์ด์ด ๋ถ์ธ ์ซ์๋ฅผ ํฉ๊ณ์ ๋ํฉ๋๋ค.
- ์ดํ `num`์ ์ด๊ธฐํํด์ ๋ค์ ์ซ์๋ฅผ ์๋ก ์ฒ๋ฆฌํฉ๋๋ค.
q. ๊ทธ๋ผ isdigit()์ ์ ์จ์ฃผ๋๊ฑฐ์ผ?
`isdigit()` ํจ์๋ ๋ฌธ์์ด์์ ํด๋น ๋ฌธ์๊ฐ ์ซ์์ธ์ง ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
`isdigit()`์ ์ญํ
- ์ซ์์ธ ๋ฌธ์์ธ์ง ํ์ธํ์ฌ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค.
- ์ซ์๊ฐ ์๋ ๋ฌธ์๋ฅผ ๊ฑธ๋ฌ๋ด์ด, ์ฐ์ฐ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ฐฉ์งํฉ๋๋ค.
์ ํ์ํ๊ฐ?
์ซ์๋ง ์ฒ๋ฆฌํ๊ธฐ ์ํด
- ๋ฌธ์์ด์๋ ์ซ์๊ฐ ์๋ ๋ฌธ์๋ ํฌํจ๋ ์ ์์ต๋๋ค. `isdigit()`์ ์ฌ์ฉํ๋ฉด ํด๋น ๋ฌธ์๊ฐ ์ซ์์ธ ๊ฒฝ์ฐ์๋ง ํน์ ์์
์ ์ํํ๋๋ก
์ ์ดํ ์ ์์ต๋๋ค. - ์: `'3'`, `'9'` ๋ฑ์ ์ซ์๋ก ์ฒ๋ฆฌ๋๊ณ , `'a'`, `'#'`, `' '` ๋ฑ์ ๋ฌด์๋ฉ๋๋ค.
์ฐ์ฐ ์ค๋ฅ ๋ฐฉ์ง
- ๋ง์ฝ ์ซ์๊ฐ ์๋ ๋ฌธ์๋ฅผ `int()`๋ก ๋ณํํ๋ ค๊ณ ์๋ํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ค๋ฅ๋ฅผ ์ผ์ผํต๋๋ค.
- `isdigit()`์ผ๋ก ์ซ์์ธ์ง ํ์ธํ๋ฉด ์ด๋ฐ ์ค๋ฅ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์์ :
my_string = "a1b2c34"
for char in my_string:
if char.isdigit():
print(char) # ์ซ์์ธ ๊ฒฝ์ฐ์๋ง ์ถ๋ ฅ
q. `re.findall()` ํจ์๋ ๋ฌด์จ ๊ธฐ๋ฅ์ ํ๋ ํจ์์ผ?
`re.findall()` ํจ์๋ ํ์ด์ฌ์ ์ ๊ท ํํ์(regular expression) ๋ชจ๋์ธ **`re`**์์ ์ ๊ณตํ๋ ํจ์๋ก,
๋ฌธ์์ด์์ ํน์ ํจํด์ ์ฐพ์ ๋ชจ๋ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ๋ก ๋ฐํํ๋ ํจ์์ ๋๋ค.
`re.findall()`์ ์ฃผ์ ๊ธฐ๋ฅ
ํจํด์ ๋ง๋ ๋ชจ๋ ๋ฌธ์์ด ๊ฒ์:
- ์ฃผ์ด์ง ์ ๊ท์ ํจํด์ ํด๋นํ๋ ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํํฉ๋๋ค.
- ๋งค์นญ๋๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์:
import re
text = "abc123def456ghi789"
result = re.findall(r'\d+', text)
print(result) # ['123', '456', '789']
ํจํด์ด ๊ทธ๋ฃน์ผ๋ก ๋๋ ๊ฒฝ์ฐ:
- ์ ๊ท์์ **๊ทธ๋ฃน(๊ดํธ `()`๋ก ๊ฐ์ผ ๋ถ๋ถ)**์ด ์๋ค๋ฉด, ๋งค์นญ๋ ๊ฒฐ๊ณผ์์ ๊ทธ๋ฃน๋ณ๋ก ๋๋ ๊ฐ๋ง ๋ฆฌ์คํธ๋ก ๋ฐํํฉ๋๋ค.
- ์:
text = "name: John, age: 25"
result = re.findall(r'name: (\w+), age: (\d+)', text)
print(result) # [('John', '25')]
๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ณต ์์ด ๋ฐํ:
- `re.findall()`์ ๋งค์นญ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ค๋ณต์ ์ ๊ฑฐํ์ง ์๊ณ ๋ชจ๋ ๋ฐํํฉ๋๋ค.
- ์:
text = "aaa bbb aaa"
result = re.findall(r'aaa', text)
print(result) # ['aaa', 'aaa']
๊ตฌ๋ฌธ
re.findall(pattern, string, flags=0)โ
- `pattern`: ์ฐพ๊ณ ์ ํ๋ ์ ๊ท ํํ์ ํจํด.
- `string`: ๊ฒ์ ๋์ ๋ฌธ์์ด.
- `flags`: ์ ๊ท ํํ์ ํ๋๊ทธ(์ ํ์ฌํญ, ๋์๋ฌธ์ ๊ตฌ๋ถ ๋ฑ์ ์กฐ์ ).
- ์: `re.IGNORECASE` (๋์๋ฌธ์ ๊ตฌ๋ถ ์ ํจ)
์ฌ์ฉ ์์
1. ์ซ์๋ง ์ถ์ถ
import re
text = "I have 3 apples, 5 bananas, and 12 oranges."
result = re.findall(r'\d+', text) # ์ซ์์ ๋งค์นญ๋๋ ํจํด
print(result) # ['3', '5', '12']
2. ํน์ ๋จ์ด ์ฐพ๊ธฐ
import re
text = "dog, cat, bird, dog"
result = re.findall(r'dog', text)
print(result) # ['dog', 'dog']
3. ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ ์ถ์ถ
import re
text = "ID:123 Name:John, ID:456 Name:Jane"
result = re.findall(r'ID:(\d+) Name:(\w+)', text)
print(result) # [('123', 'John'), ('456', 'Jane')]
4. ๋์๋ฌธ์ ๋ฌด์
import re
text = "Python python PYTHON"
result = re.findall(r'python', text, re.IGNORECASE)
print(result) # ['Python', 'python', 'PYTHON']
`re.findall()`์ ํ๊ณ
- ๋ฐํ๋ ๊ฒฐ๊ณผ๋ ๋งค์นญ๋ ํ
์คํธ๋ง ํฌํจ๋๋ฉฐ, ๋งค์นญ์ ์์น ์ ๋ณด(์ธ๋ฑ์ค ๋ฑ)๊ฐ ํ์ํ๋ฉด `re.finditer()` ๋๋ **`re.search()`**๋ฅผ
์ฌ์ฉํด์ผ ํฉ๋๋ค. - ์:
import re
text = "abc123def"
for match in re.finditer(r'\d+', text):
print(match.group(), match.start(), match.end())
# ์ถ๋ ฅ: 123 3 6
q. ๊ทผ๋ฐ r'\d+'์์ +๋ ์์จ์ฃผ๋๊ฑฐ์ผ?
์ ๊ท์์์ **`+`**๋ **'1ํ ์ด์ ๋ฐ๋ณต'**์ ์๋ฏธํ๋ ๋ฉํ๋ฌธ์์ ๋๋ค.
๋ฐ๋ผ์ **`r'\d+'`**์์ `+`๋ ํ๋ ์ด์์ ์ซ์๋ฅผ ์ฐพ๊ฒ ๋ค๋ ๋ป์ ๋๋ค.
`+`์ ์๋ฏธ
- **`\d`**๋ **"์ซ์"**๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ, `0-9` ์ฌ์ด์ ์ซ์ 1๊ฐ๋ฅผ ์ฐพ์ต๋๋ค.
- **`\d+`**๋ **"ํ๋ ์ด์์ ์ซ์"**๋ฅผ ์ฐพ๊ฒ ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ฆ, ์ซ์๋ค์ด ์ฐ์ํด์ ๋์ค๋ ๋ถ๋ถ์ ์ฐพ์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, **`'123'`**์ฒ๋ผ 3๊ฐ์ ์ซ์๊ฐ ์ด์ด์ ธ ์๋ ๊ฒฝ์ฐ๋ **`'5'`**์ฒ๋ผ ํ๋์ ์ซ์๋ง ์๋ ๊ฒฝ์ฐ ๋ชจ๋ **`+`**๋ฅผ
์ฌ์ฉํ์ฌ ์ฐพ์ ์ ์์ต๋๋ค.
q. ๊ทธ๋ผ ์ผ๋จ r'\d+' ์ด ์ ์์ฒด๋ง ์ฌ์ฉํ๋๊ฑด ๊ตณ์ด `e๋ฅผ import ํ์ง ์์๋ ๋๋๊ฑฐ์ผ? ์๋๋ฉด
r'\d+'๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ re๋ ๋ถ๋ฌ์์ค์ผ ํ๋๊ฒ ๋ฃฐ์ธ๊ฑฐ์ผ?
`r'\d+'` ์์ฒด๋ ์ ๊ท ํํ์(Regular Expression) ์ ํจํด์ ๋ํ๋ด๋ ๋ฌธ์์ด์ผ ๋ฟ์ ๋๋ค.
์ด ํจํด์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ๋์ `re` ๋ชจ๋์ import ํด์ผ ํฉ๋๋ค.
์ `re` ๋ชจ๋์ importํด์ผ ํ๋์ง?
- ์ ๊ท์์ ํ์ด์ฌ์ ๋ด์ฅ ๊ธฐ๋ฅ์ด์ง๋ง, ์ ๊ท์์ ์ฒ๋ฆฌํ ์ ์๋ ํจ์๋ค์ ์ ๊ณตํ๋ ๋ชจ๋์ด **`re`**์ ๋๋ค.
- **`r'\d+'`**๋ ์ ๊ท ํํ์ ํจํด์ ๋ํ๋ด๋ ๋ฌธ์์ด์ผ ๋ฟ์ด๋ฉฐ, ์ด ํจํด์ ์ด์ฉํด ์ค์ ๋ก ํ ์คํธ์์ ์ซ์๋ฅผ ์ฐพ๊ฑฐ๋, ๋ฐ๊พธ๊ฑฐ๋, ๋งค์นญ์ํค๋ ์์ ์ ํ๋ ค๋ฉด `re` ๋ชจ๋์ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์์: `re` ๋ชจ๋์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฉ๋๋ค
1. `re` ๋ชจ๋์ importํ์ง ์๊ณ ์ฌ์ฉํ ๊ฒฝ์ฐ
# re ๋ชจ๋์ importํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
result = re.findall(r'\d+', "abc123def456")
2. `re` ๋ชจ๋์ importํ ํ ์ฌ์ฉํ ๊ฒฝ์ฐ
import re
result = re.findall(r'\d+', "abc123def456")
print(result) # ['123', '456']
์์ ๊ฐ์ด `re` ๋ชจ๋์ importํ ํ์ **`findall`**๊ณผ ๊ฐ์ ์ ๊ท์ ๊ด๋ จ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ฆฌ
- **`r'\d+'`**๋ ์ ๊ท ํํ์ ํจํด์ด๊ณ , ์ด๋ฅผ ํ์ฉํ๊ธฐ ์ํด์๋ `re` ๋ชจ๋์ importํด์ผ ํฉ๋๋ค.
- `re` ๋ชจ๋์ importํ์ง ์์ผ๋ฉด, ์ ๊ท์์ ํ์ฉํ ํจ์๋ค์ด ์ ์๋์ด ์์ง ์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค๋ ๋๋ ์ :
์ซ์ ๋ํ๊ธฐ๋ก ์์ํด์ ์ค๋ ์ฐธ ๋ค์ํ๊ฒ ๋ฐฐ์ ๋ค~
์์ผ๋ก ๋น์ทํ ๋ฌธ์ ์ ํ ๋์ค๋ฉด ์ค๋ ๋ฐฐ์ด ๋ด์ฉ ๊ธฐ์ตํด์ ํค๋งค์ง ์๊ธฐ~!
'Algorithm ๐ > ๋ฌธ์ ํ์ด ๐ฏ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250128] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (0) | 2025.01.28 |
---|---|
[250123] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (1) | 2025.01.23 |
[250113] ํ๋ก๊ทธ๋๋จธ์ค ๊ธฐ์ด ํธ๋ ์ด๋ ๋ฌธ์ (0) | 2025.01.13 |
[250108] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (0) | 2025.01.08 |
[250106] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ ๋ฌธ ๋ฌธ์ (1) | 2025.01.06 |