์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 34
๋ด์ฉ
- ๊ธฐ๋ณธ ํ์ - ๊ธฐ์ด
๋ฌธ์ ๊ฒ์
๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค.
์ฒ์ ๋ฌธ์์ด์ ๋ฌธ์, ๋๋ฒ์งธ ๋ฌธ์์ด์ ๋จ์ด๋ผ๊ณ ํ ๋,
๋ฌธ์์์ ๋ฌธ์์ด์ด ๋ช๋ฒ ์ค๋ณต๋์ง ์๋๋ก ๋ฑ์ฅํ๋์ง ํ์๋ฅผ ์ธ๋ ๋ฌธ์ ,
โababababaโ
โabaโ
-> ababababa
๋งจ ์ฒ์์ ababa์์ {0, 1, 2 ๋ฒ์งธ ๊ธ์} ๊ทธ๋ฃน๊ณผ,
{2, 3, 4 ๋ฒ์งธ ๊ธ์} ๊ทธ๋ฃน์ ์๋ก 2๋ฒ์งธ ๊ธ์๊ฐ ๊ฒน์น๊ธฐ ๋๋ฌธ์ ์ธ์ง ์๋๋ค.
๋ฌธ์์ ๊ธธ์ด(d) 2500, ๋จ์ด์ ๊ธธ์ด(w) 50 ์๊ฐ์ ํ 2์ด/ ๋ฉ๋ชจ๋ฆฌ ์ ํ 128MB
์์ ํ์์ผ๋ก $O(dw) = d*w = 125000$์ ๋๋ฉด ๊ฐ๋ฅํ๊ฒ ๋ค.
d = input()
w = input()
cnt = 0
i = 0
while i < len(d) - len(w) + 1:
found = True
for k in range(len(w)):
if d[i + k] != w[k]:
found = False
i += 1
break
if found:
i += len(w)
cnt += 1
print(cnt)
- ๋ฌธ์์ ์ฒซ ๊ธ์๋ถํฐ ์ฐจ๋ก๋๋ก ์ ํ
- ์ ํํ ๊ธ์์ ํด๋น ์์น๋ถํฐ w์ ์ผ์นํ๋ ์ง ํ์ธ
- ์ผ์นํ๋ ๊ฒฝ์ฐ ์ผ์นํ๋ ์ + 1, w์ ๊ธธ์ด๋งํผ ๊ฑด๋๋ฐ๊ณ , ๋ค์ ๊ธ์ ์ ํ, 2๋ฒ๋ถํฐ ๋ฐ๋ณต
- ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ๋ค์ ๊ธ์ ์ ํ, 2๋ฒ๋ถํฐ ๋ฐ๋ณต
์ฝ๊ฐ ๋ ๋ณด๊ธฐ์ข์ ์ฝ๋
๋ฌธ์์ด ๋น๊ต๋ฅผ ์ฌ๋ผ์ด์ฑ์ ํตํด ๋น๊ตํ ์ ์๋ค.
d = input()
w = input()
i = 0
result = 0
while len(d) - i >= len(w):
if d[i : i + len(w)] == w:
result += 1
i += len(word)
else:
i += 1
print(result)
์
์ต๋ 1,000,000,000 ์๊ฐ์ ํ 2์ด
๋ค๋ค ๋ฌธ์ ์ ์ ํ๋๋ก ์๊ฐํ๊ณ ,
์ด๊ฒ ์๊ฐ์์ ๋ ๊น? ๋ผ๋ ์๊ฐ์ ํ ํ
๋ฐ,
1+2+3+โฆํ๋ค๋ณด๋ฉด ๋น ๋ฅด๊ฒ ์ปค์ง๋ค.
๊ฐ์ฅ ๋ฐ๋ณตํ์๊ฐ ํฐ ์ฒซ ์ฌ์ดํด์์์ ์๊ฐ(์ด)๋ฅผ ๊ตฌํด๋ณด์
$1,000,000,000 = {n(n+1)\over2}$
$2,000,000,000 = n^2 + n$
$n \fallingdotseq 44721$
๋๋ต $O(\sqrt n)$์ ๋ ๋์ค๊ฒ ๋ค.
n = int(input())
i = 1
t = 0
while n:
if i <= n:
n -= i
else:
i = 1
n -= i
i += 1
t += 1
print(t)
๋ฒ ์คํธ์ ๋ฌ
ํ๋ฆฐ ์ฑ ์ ์ด๋ฆ ๋ชฉ๋ก์ ํตํด ๊ฐ์ฅ ๋ง์ด ํ๋ฆฐ ์ฑ ์ ์ด๋ฆ์ ๊ตฌํ๋ ๋ฌธ์
d = input()
w = input()
cnt = 0
i = 0
while i < len(d) - len(w) + 1:
found = True
for k in range(len(w)):
if d[i + k] != w[k]:
found = False
i += 1
break
if found:
i += len(w)
cnt += 1
print(cnt)
๋ง์ง๋ง
๋ด์ฉ
๋๊ธ๋จ๊ธฐ๊ธฐ