ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
n ๋ช ์ ํ์์ด ์๊ณ , ํ์๋ค์ ๊ณ ์ ๋ฒํธ๊ฐ ์๋ค. ๊ทผ๋ฐ ํ์๋ค ์ค ๋ช ๋ช ์ ์ฒด์ก๋ณต์ ๋๋๋นํ๋ค. ์ฌ๋ฒ์ด ์๋ ํ์์ ์ฒด์ก๋ณต์ ๋น๋ ค ์ค ์ ์๋ค.
๊ทผ๋ฐ ์ฒด์ก๋ณต์ ๋น๋ ค์ฃผ๋ ๊ฒ์ ๋ฐ๋ก ์๋ฒํธ(i - 1) ๋๋ ๋ท๋ฒํธ(i + 1)๋ง ๋น๋ ค์ค ์ ์๋ค. ์ฒด์ก๋ณต์ด ์์ด์ผ ์ฒด์ก ์์ ์ ๋ค์ ์ ์๋ค๊ณ ํ์ ๋, ์ต๋ ๋ช ๋ช ๊น์ง ๋ค์ ์ ์์๊น?
์์ด๋์ด
ํ์ ๋ฒํธ๋ฅผ ์ธ๋ฑ์ค๋ก ํ๋ ๋ฆฌ์คํธ๋ฅผ 1๋ก ์ด๊ธฐํํด ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๋ฒ์ด ์๋ ํ์์ +1, ๋๋๋นํ ํ์์ -1 ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ ๋๋๋นํ ํ์ ์ ์์ ์ฌ๋ถ์ด ์๋ ํ์์ด ์๋์ง ์ฒดํฌํด ์ค๋ค.
์์ผ๋ฉด ๋ ์ฌ๋์ ์ฒด์ก๋ณต ๊ฐ์๋ฅผ 1๋ก ๋ฐ๊ฟ ์ค๋ค.
๋ง์ง๋ง์ ๋ฆฌ์คํธ์ ์ฒด์ก๋ณต ๊ฐ์๊ฐ 0๊ฐ์ธ ํ์ ์๋ฅผ count ํด์ n๊ฐ์์ ๋นผ์ฃผ๊ณ ์ ๋ต์ return ํด์ค๋ค.
์ ์ฒด ์ฝ๋
def solution(n, lost, reserve):
Arr = [1] * (n + 2)
for r in reserve:
Arr[r] += 1
for l in lost:
Arr[l] -= 1
for i in range(1, n + 1):
if Arr[i - 1] == 0 and Arr[i] == 2:
Arr[i - 1], Arr[i] = 1, 1
elif Arr[i] == 2 and Arr[i + 1] == 0:
Arr[i], Arr[i + 1] = 1, 1
answer = n - Arr.count(0)
return answer
์ฝ๋ ์ค๋ช
Arr = [1] * (n + 2)
for r in reserve:
Arr[r] += 1
for l in lost:
Arr[l] -= 1
๋จผ์ ํ์์ ์ฒด์ก๋ณต ๊ฐ์๋ฅผ ๋ด์ ๋ฆฌ์คํธ Arr๋ฅผ ์ ์ธํด ์ค๋ค. default๊ฐ์ 1๋ก ์ค์ ํด ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ ์์ ์ฐ์ฐ์ ํธ์์ฑ์ ์ํด 1๋ฒ๊ณผ n๋ฒ ์ ๋์ ํ๋์ฉ ์ถ๊ฐํด ๋ฆฌ์คํธ ํฌ๊ธฐ๋ฅผ n + 2๋ก ์ ์ธํด ์ค๋ค. (0, 1, 2, 3... n - 1, n, n + 1)
๊ทธ๋ฆฌ๊ณ reserve์ lost์ ์๋ ํ์ ๋ฒํธ๋ฅผ ํ์ธํ์ฌ Arr์ ์๋ ์ฒด์ก๋ณต ๊ฐ์๋ฅผ ์กฐ์ ํด ์ค๋ค.
for i in range(1, n + 1):
if Arr[i - 1] == 0 and Arr[i] == 2:
Arr[i - 1], Arr[i] = 1, 1
elif Arr[i] == 2 and Arr[i + 1] == 0:
Arr[i], Arr[i + 1] = 1, 1
answer = n - Arr.count(0)
for๋ฌธ์ผ๋ก Arr๋ฅผ ์ํํ๋ฉฐ ์ฌ๋ณ์ ์ฒด์ก๋ณต์ ๋น๋ ค์ฃผ๋ ์กฐ๊ฑด์ ํ์ธํด ์ค๋ค. ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๊ฐ์ 1๋ก ๋ฐ๊ฟ์ค๋ค.
์ต์ข ์ ์ผ๋ก Arr์ ์๋ ์์์ค ๊ฐ์ด 0์ธ ๊ฒ๋ค์ count ํด์ n๊ฐ์์ ๋นผ์ฃผ๋ฉด, ๋ฌธ์ ์์ ์๊ตฌํ๋ ์ ๋ต์ด ๋๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ - set ์ด์ฉ
def solution(n, lost, reserve):
s = set(lost) & set(reserve)
l = set(lost) - s
r = set(reserve) - s
for k in sorted(r):
if (k - 1) in l:
l.remove(k - 1)
elif (k + 1) in l:
l.remove(k + 1)
return n - len(l)
๋๋์ด๋ ์ฌ๋ฒ์ ์์๋๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก ์งํฉ์ ํ์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ฌธ์ ์์ ์ฃผ์ด์ง lost์ reserve์ ๊ต์งํฉ s๋ฅผ ๊ตฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ lost์ reserve ์งํฉ์์ s์ ์์๋ค์ ์ ์ธ์์ผ ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๋ฒ์ด ์๋ ํ์๋ค์ ์งํฉ r์ ์ํํ๋ฉฐ ์๋ค(k - 1, k + 1)์ ๋๋๋นํ ํ์์ด ์๋์ง ํ์ธํด ์ค๋ค.
์์ผ๋ฉด ๊ทธ ํ์์ ์งํฉ l์์ ์ ์ธ์์ผ์ค๋ค.
์์ ํ์ด์ ์ ์ฌํ๊ฒ n์์ ์งํฉ l์ ์์ ๊ฐ์๋ฅผ ๋นผ์ฃผ๋ฉด ๋๋ค.