[Programmers] ์ฒด์ก๋ณต
Updated:
์ฒด์ก๋ณต
์ฒด์ก๋ณต ์ ํด๋ฆญํ๋ฉด ๋ฐ๋ก ์ด๋ํ๋ค.
์๋ 7์์ ํ์๋ ๋ฌธ์ ์ด๋ค.
๊ทธ๋ฆฌ๋๋ฅผ ๋ค์ ํ์ด๋ณด๊ณ ์ถ์ด ํ์๋๋ฐ..
์๋ ์ ๋๋ ์ ์ ๋ ๊ฒ ํ์์๊น ์๋ฌธ์ด ๋ ๋ค..
์ฐ์ ๋ฌธ์ ์กฐ๊ฑด์ ๋ณด๋ฉด ์ฌ๋ถ์ ์ฒด์ก๋ณต์ ๊ฐ์ ธ์์ง๋ง ์์ด๋ฒ๋ฆฐ ์น๊ตฌ๋ ์์ ์ ์๋ค.
๊ทธ ์น๊ตฌ๋ค์ ์ ์ธ ํด์ฃผ๊ณ ์ฒด์ก๋ณต์ ์์ด๋ฒ๋ฆฐ ์น๊ตฌ์ ๋ํด ๋น๋ ค ์ค ์ ์๋ ์น๊ตฌ๊ฐ ์์ผ๋ฉด ๋ ๋ค ์ง์๊ฐ๋ฉฐ ๊ณ์ฐํ๋ค.
def solution(n, lost, reserve):
# ์ฌ๋ถ์ ๊ฐ์ ธ ์์ง๋ง ์์ด๋ฒ๋ฆฐ ์ฌ๋ ์ ์ธ
intersection = set(lost).intersection(set(reserve))
lost = list(set(lost) - intersection)
reserve = list(set(reserve) - intersection)
lost_person = len(lost)
for per in lost:
if per - 1 in reserve:
lost_person -= 1
reserve.remove(per - 1)
continue
if per + 1 in reserve:
lost_person -= 1
reserve.remove(per + 1)
continue
return n - lost_person
์์ง ์ฝ๋์ ๋ฐ ์ ๋๋ง ํ์ด์ฌ ๋ค์ด ๋๋์ด ๋ ๋ค !!
comprehension ๊ธฐ๋ฅ์ด ์์ฃผ ๊ฐ๋ ฅํ๊ณ ํธํ ๊ฑธ ์๊ฒ ๋์๋ค.
์๋ ๋ด๊ฐ ์ํ๋ ๋ฐฉ์๋๋ก dict ๋ฅผ ๋ง๋ค๋ ค๋ฉด for ๋ฌธ ์์ ์กฐ๊ฑด๋ฌธ์ ์จ์ dict ๋ฅผ ๋ง๋ค์ด์ผ ํ์ ๊ฒ ์ด๋ค.
def giveAndTakeCloth(perDict, key, n):
if key == 1:
if perDict[key+1] == 2:
perDict[key+1] -= 1
perDict[key] += 1
elif key == n:
if perDict[key-1] == 2:
perDict[key-1] -= 1
perDict[key] += 1
else:
if perDict[key-1] == 2:
perDict[key-1] -= 1
perDict[key] += 1
if perDict[key+1] == 2:
perDict[key+1] -= 1
perDict[key] += 1
def solution (n, lost, reserve):
answer = 0
perDict = {i+1:(1 if i+1 in reserve and i+1 in lost else 2 if i+1 in reserve else 0 if i+1 in lost else 1) for i in range(n)}
for key, val in zip(perDict.keys(), perDict.values()):
if val == 0:
giveAndTakeCloth(perDict, key, n)
for val in perDict.values():
if val >= 1:
answer += 1
return answer
reserve, lost ๋ฅผ ๊ฐ์ง๊ณ ๋งจ ์ฒ์ ์ท์ ๊ฐ์ง๊ณ ์๋ ์ํ์ธ dict ๋ฅผ ๋ง๋ค๊ณ ๊ณ์ฐ์ ํ๋ค.
๋ฌด์กฐ๊ฑด ์ผ์ชฝ๋จผ์ ์ฃผ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋ฉ์ ํ๋ค.
๊ทธ๋ฐ๋ฐ ๊ทธ๋ ๊ฒ ํ๋ฉด ๋งจ ์ผ์ชฝ ์ฌ๋, ๋งจ ์ค๋ฅธ์ชฝ ์ฌ๋์ ๊ฒฝ์ฐ key ์ค๋ฅ๊ฐ ๋ฐ์ ํด ๋ฐ๋ก ๊ฒฝ์ฐ๋ฅผ ๋๋์ด ์คฌ๋ค.
๋ถ๋ช
~ํ ๋ ์ข์ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ผ ์ ์์ ๊ฒ ๊ฐ์๋ฐ ์์ง ์๊ฐ์ด ์๋๋ค..
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ณด๋๊น ์ฌ๋ ๋ฒํธ ์์ฒด๋ฅผ ํตํด ์ท์ ์ฃผ๊ณ , ๋ฐ์์ lost, reverse ์์ remove ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ค.
์ง์ง ๋ฉ์๋ ์ฌ๋๋ค..
Leave a comment