๐ค๋ฌธ์ ํด๊ฒฐ
- Lv3
- ์ค์น๋ ๊ตฌ์กฐ๋ฌผ์ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ์ ์๋๋ค.
ex) ์ค์น๋_๋ฆฌ์คํธ: [(์ขํ, ์ขํ, ๊ตฌ์กฐ๋ฌผ), ..., (์ขํ, ์ขํ, ๊ตฌ์กฐ๋ฌผ)] | x,y,(๊ธฐ๋ฅor๋ณด) - ์ด ์ค์น๋ ๊ตฌ์กฐ๋ฌผ ๋ฆฌ์คํธ๋ฅผ for๋ฌธ์ ๋๋ฉฐ ์ด ๊ตฌ์กฐ๋ฌผ๋ค์ ์ค์น๊ฐ ์กฐ๊ฑด์ ๋ง๋ ์ง ์ฒดํฌํ๋ค. def check()
- ๊ตฌ์กฐ๋ฌผ ์ค์น์ผ ๊ฒฝ์ฐ
- ์ผ๋จ ์ค์นํ๋ค.
- ํฐ 3๋ฒ์ ์ฒดํฌํ๋ค.
- ๊ตฌ์กฐ๋ฌผ๋ค์ด ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ์ถ๊ฐํ ๊ฒ์ ์ญ์ ํ๋ค.
- ๊ตฌ์กฐ๋ฌผ ์ญ์ ์ผ ๊ฒฝ์ฐ
- ์ผ๋ค ์ญ์ ํ๋ค.
- 3๋ฒ์ ์ฒดํฌํ๋ค.
- ๊ตฌ์กฐ๋ฌผ๋ค์ด ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ์ญ์ ํ ๊ฒ์ ์ถ๊ฐํ๋ค.
- ์ ์ ๋ ฌํด์ ๋ต์ ์ถ๋ ฅํ๋ค.!!!!!
๐จ ์ฌ๊ธฐ์ set() ์์ฐ๋ ์ด์ ๋ if a in list: ๊ฐ์ ๊ฒฝ์ฐ ๋๋ฌธ.
๋ฆฌ์คํธ๋ก ํ์ํ๋ ๊ฒฝ์ฐ๋ O(n) ์ด์ง๋ง
์ ์ผ๋ก ํ์ํ๋ ๊ฒฝ์ฐ๋ O(1) ์ด๋ค.
๋ง์ง๋ง์ ๋ต์ ์ถ๋ ฅํ๊ธฐ ์ํด ๋ฐ๊ฟ์ค์ผํ๋๊ฒ ๊ท์ฐฎ์ง๋ง ์ด ๋ฌธ์ ์์๋ ํ์์ ๋ง์ด ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์์ ํฐ ์ฐจ์ด๊ฐ ๋๋ค. ๋ฌผ๋ก ๋ฆฌ์คํธ๋ก ํด๋ ํต๊ณผ๋ ํ ์ ์๋ค.
๐ป์์ค ์ฝ๋
def check(answer):
for x, y, structure in answer:
if structure == 0: # ๊ธฐ๋ฅ
# ์๋ ๋ฐ๋ฅ or ์๋ ๊ธฐ๋ฅ or ์ผ์ชฝ ๋ณด or ์ค๋ฅธ์ชฝ ๋ณด
if y == 0 or (x, y - 1, 0) in answer or (x - 1, y, 1) in answer or (x, y, 1) in answer:
continue
else:
return False
else: # ๋ณด
# ์๋ ๊ธฐ๋ฅ or ์ค๋ฅธ์ชฝ ์๋ ๊ธฐ๋ฅ or (์ผ์ชฝ ๋ณด and ์ค๋ฅธ์ชฝ ๋ณด)
if (x, y - 1, 0) in answer or (x + 1, y - 1, 0) in answer or (
(x - 1, y, 1) in answer and (x + 1, y, 1) in answer):
continue
else:
return False
return True
def solution(n, build_frame):
# set์ ์ฐ๋ ์ด์ : if a in lst ์ ๊ฐ์ด ์ด๋ค ๋ฆฌ์คํธ์์ ๊ฐ์ด ๋ค์ด์๋์ง ์๋์ง ํ์ธํ ๋ set์ด ํจ์ฌ ๋น ๋ฅด๋ค
answer = set()
for x, y, structure, action in build_frame:
# set์๋ listํํ๋ฅผ addํ ์ ์๋ค. ๋์ค์ ๋ฐ๊ฟ์ค์ผ ํด์ ๊ท์ฐฎ๋ค.. ํ์ง๋ง ์๋
xys = (x, y, structure)
if action == 1: # ์ค์น
answer.add(xys) # ์ผ๋จ ์ค์นํด๋ณด๊ณ
if not check(answer): # ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด
answer.remove(xys) # ๋ค์ ์ญ์
else: # ์ญ์
answer.remove(xys) # ์ผ๋จ ์ญ์ ํ๊ณ
if not check(answer): # ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด
answer.add(xys) # ๋ค์ ์ถ๊ฐ
# ์ ๋ ฌ...
answer = [list(ans) for ans in answer]
answer.sort(key=lambda x: (x[0], x[1], x[2]))
return answer
qq = [
[5, [[1, 0, 0, 1], [1, 1, 1, 1], [2, 1, 0, 1], [2, 2, 1, 1], [5, 0, 0, 1], [5, 1, 0, 1], [4, 2, 1, 1],
[3, 2, 1, 1]], ],
[5, [[0, 0, 0, 1], [2, 0, 0, 1], [4, 0, 0, 1], [0, 1, 1, 1], [1, 1, 1, 1], [2, 1, 1, 1], [3, 1, 1, 1], [2, 0, 0, 0],
[1, 1, 1, 0], [2, 2, 0, 1]]]
]
for q in qq:
print(solution(q[0], q[1]))
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค
๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/60061
๋ฌธ์ ์ค๋ช
๋นํ๊ฐ ๊นจ์ง๋ฉด์ ์ค๋
ธ์ฐํ์ด์ ๋ ๋ด๋ ค ์จ ์ฃ ๋ฅด๋๋ ์ธ์ 2๋ง์ ์ํด ์ฃผํ ๊ฑด์ถ์ฌ์
์ ๋ฐ์ด๋ค๊ธฐ๋ก ๊ฒฐ์ฌํ์์ต๋๋ค. ์ฃ ๋ฅด๋๋ ๊ธฐ๋ฅ๊ณผ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋ฒฝ๋ฉด ๊ตฌ์กฐ๋ฌผ์ ์๋์ผ๋ก ์ธ์ฐ๋ ๋ก๋ด์ ๊ฐ๋ฐํ ๊ณํ์ธ๋ฐ, ๊ทธ์ ์์ ๋ก๋ด์ ๋์์ ์๋ฎฌ๋ ์ด์
ํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ 2์ฐจ์ ๊ฐ์ ๋ฒฝ๋ฉด์ ๊ธฐ๋ฅ๊ณผ ๋ณด๋ฅผ ์ด์ฉํ ๊ตฌ์กฐ๋ฌผ์ ์ค์นํ ์ ์๋๋ฐ, ๊ธฐ๋ฅ๊ณผ ๋ณด๋ ๊ธธ์ด๊ฐ 1์ธ ์ ๋ถ์ผ๋ก ํํ๋๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๊ธฐ๋ฅ์ ๋ฐ๋ฅ ์์ ์๊ฑฐ๋ ๋ณด์ ํ์ชฝ ๋ ๋ถ๋ถ ์์ ์๊ฑฐ๋, ๋๋ ๋ค๋ฅธ ๊ธฐ๋ฅ ์์ ์์ด์ผ ํฉ๋๋ค.
- ๋ณด๋ ํ์ชฝ ๋ ๋ถ๋ถ์ด ๊ธฐ๋ฅ ์์ ์๊ฑฐ๋, ๋๋ ์์ชฝ ๋ ๋ถ๋ถ์ด ๋ค๋ฅธ ๋ณด์ ๋์์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค.
๋จ, ๋ฐ๋ฅ์ ๋ฒฝ๋ฉด์ ๋งจ ์๋ ์ง๋ฉด์ ๋งํฉ๋๋ค.
2์ฐจ์ ๋ฒฝ๋ฉด์ n x n ํฌ๊ธฐ ์ ์ฌ๊ฐ ๊ฒฉ์ ํํ์ด๋ฉฐ, ๊ฐ ๊ฒฉ์๋ 1 x 1 ํฌ๊ธฐ์ ๋๋ค. ๋งจ ์ฒ์ ๋ฒฝ๋ฉด์ ๋น์ด์๋ ์ํ์ ๋๋ค. ๊ธฐ๋ฅ๊ณผ ๋ณด๋ ๊ฒฉ์์ ์ ๊ต์ฐจ์ ์ ๊ฑธ์น์ง ์๊ณ , ๊ฒฉ์ ์นธ์ ๊ฐ ๋ณ์ ์ ํํ ์ผ์นํ๋๋ก ์ค์นํ ์ ์์ต๋๋ค. ๋ค์์ ๊ธฐ๋ฅ๊ณผ ๋ณด๋ฅผ ์ค์นํด ๊ตฌ์กฐ๋ฌผ์ ๋ง๋ ์์์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ ๊ทธ๋ฆผ์ ๋ค์ ์์์ ๋ฐ๋ผ ๊ตฌ์กฐ๋ฌผ์ ๋ง๋ค์์ต๋๋ค.
- (1, 0)์์ ์์ชฝ์ผ๋ก ๊ธฐ๋ฅ์ ํ๋ ์ค์น ํ, (1, 1)์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ฅผ ํ๋ ๋ง๋ญ๋๋ค.
- (2, 1)์์ ์์ชฝ์ผ๋ก ๊ธฐ๋ฅ์ ํ๋ ์ค์น ํ, (2, 2)์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ฅผ ํ๋ ๋ง๋ญ๋๋ค.
- (5, 0)์์ ์์ชฝ์ผ๋ก ๊ธฐ๋ฅ์ ํ๋ ์ค์น ํ, (5, 1)์์ ์์ชฝ์ผ๋ก ๊ธฐ๋ฅ์ ํ๋ ๋ ์ค์นํฉ๋๋ค.
- (4, 2)์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ฅผ ์ค์น ํ, (3, 2)์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ฅผ ์ค์นํฉ๋๋ค.
๋ง์ฝ (4, 2)์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ฅผ ๋จผ์ ์ค์นํ์ง ์๊ณ , (3, 2)์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ฅผ ์ค์นํ๋ ค ํ๋ค๋ฉด 2๋ฒ ๊ท์น์ ๋ง์ง ์์ผ๋ฏ๋ก ์ค์น๊ฐ ๋์ง ์์ต๋๋ค. ๊ธฐ๋ฅ๊ณผ ๋ณด๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ๋ ์๋๋ฐ ๊ธฐ๋ฅ๊ณผ ๋ณด๋ฅผ ์ญ์ ํ ํ์ ๋จ์ ๊ธฐ๋ฅ๊ณผ ๋ณด๋ค ๋ํ ์ ๊ท์น์ ๋ง์กฑํด์ผ ํฉ๋๋ค. ๋ง์ฝ, ์์ ์ ์ํํ ๊ฒฐ๊ณผ๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋๋ค๋ฉด ํด๋น ์์ ์ ๋ฌด์๋ฉ๋๋ค.
๋ฒฝ๋ฉด์ ํฌ๊ธฐ n, ๊ธฐ๋ฅ๊ณผ ๋ณด๋ฅผ ์ค์นํ๊ฑฐ๋ ์ญ์ ํ๋ ์์ ์ด ์์๋๋ก ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด build_frame์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ ํ ๊ตฌ์กฐ๋ฌผ์ ์ํ๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- n์ 5 ์ด์ 100 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- build_frame์ ์ธ๋ก(ํ) ๊ธธ์ด๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- build_frame์ ๊ฐ๋ก(์ด) ๊ธธ์ด๋ 4์ ๋๋ค.
- build_frame์ ์์๋ [x, y, a, b]ํํ์
๋๋ค.
- x, y๋ ๊ธฐ๋ฅ, ๋ณด๋ฅผ ์ค์น ๋๋ ์ญ์ ํ ๊ต์ฐจ์ ์ ์ขํ์ด๋ฉฐ, [๊ฐ๋ก ์ขํ, ์ธ๋ก ์ขํ] ํํ์ ๋๋ค.
- a๋ ์ค์น ๋๋ ์ญ์ ํ ๊ตฌ์กฐ๋ฌผ์ ์ข ๋ฅ๋ฅผ ๋ํ๋ด๋ฉฐ, 0์ ๊ธฐ๋ฅ, 1์ ๋ณด๋ฅผ ๋ํ๋ ๋๋ค.
- b๋ ๊ตฌ์กฐ๋ฌผ์ ์ค์นํ ์ง, ํน์ ์ญ์ ํ ์ง๋ฅผ ๋ํ๋ด๋ฉฐ 0์ ์ญ์ , 1์ ์ค์น๋ฅผ ๋ํ๋ ๋๋ค.
- ๋ฒฝ๋ฉด์ ๋ฒ์ด๋๊ฒ ๊ธฐ๋ฅ, ๋ณด๋ฅผ ์ค์นํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
- ๋ฐ๋ฅ์ ๋ณด๋ฅผ ์ค์น ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
- ๊ตฌ์กฐ๋ฌผ์ ๊ต์ฐจ์ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด๋ ์ค๋ฅธ์ชฝ, ๊ธฐ๋ฅ์ ์์ชฝ ๋ฐฉํฅ์ผ๋ก ์ค์น ๋๋ ์ญ์ ํฉ๋๋ค.
- ๊ตฌ์กฐ๋ฌผ์ด ๊ฒน์น๋๋ก ์ค์นํ๋ ๊ฒฝ์ฐ์, ์๋ ๊ตฌ์กฐ๋ฌผ์ ์ญ์ ํ๋ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ์ต์ข
๊ตฌ์กฐ๋ฌผ์ ์ํ๋ ์๋ ๊ท์น์ ๋ง์ถฐ return ํด์ฃผ์ธ์.
- return ํ๋ ๋ฐฐ์ด์ ๊ฐ๋ก(์ด) ๊ธธ์ด๊ฐ 3์ธ 2์ฐจ์ ๋ฐฐ์ด๋ก, ๊ฐ ๊ตฌ์กฐ๋ฌผ์ ์ขํ๋ฅผ ๋ด๊ณ ์์ด์ผ ํฉ๋๋ค.
- return ํ๋ ๋ฐฐ์ด์ ์์๋ [x, y, a] ํ์์ ๋๋ค.
- x, y๋ ๊ธฐ๋ฅ, ๋ณด์ ๊ต์ฐจ์ ์ขํ์ด๋ฉฐ, [๊ฐ๋ก ์ขํ, ์ธ๋ก ์ขํ] ํํ์ ๋๋ค.
- ๊ธฐ๋ฅ, ๋ณด๋ ๊ต์ฐจ์ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ, ๋๋ ์์ชฝ ๋ฐฉํฅ์ผ๋ก ์ค์น๋์ด ์์์ ๋ํ๋ ๋๋ค.
- a๋ ๊ตฌ์กฐ๋ฌผ์ ์ข ๋ฅ๋ฅผ ๋ํ๋ด๋ฉฐ, 0์ ๊ธฐ๋ฅ, 1์ ๋ณด๋ฅผ ๋ํ๋ ๋๋ค.
- return ํ๋ ๋ฐฐ์ด์ x์ขํ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ฉฐ, x์ขํ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ y์ขํ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
- x, y์ขํ๊ฐ ๋ชจ๋ ๊ฐ์ ๊ฒฝ์ฐ ๊ธฐ๋ฅ์ด ๋ณด๋ณด๋ค ์์ ์ค๋ฉด ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์
nbuild_frameresult
5 | [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] | [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] |
5 | [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] | [[0,0,0],[0,1,1],[1,1,1],[2,1,1],[3,1,1],[4,0,0]] |
์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
์ฌ๋ ๋ฒ์งธ ์์ ์ ์ํ ํ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ฌผ ๋ง๋ค์ด์ง๋๋ค.
์ํ ๋ฒ์งธ ์์ ์ ๊ฒฝ์ฐ, (1, 1)์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ณด๋ฅผ ์ญ์ ํ๋ฉด (2, 1)์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ณด๋ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฏ๋ก ๋ฌด์๋ฉ๋๋ค.
์ด ๋ฒ์งธ ์์ ์ ๊ฒฝ์ฐ, (2, 2)์์ ์์ชฝ ๋ฐฉํฅ์ผ๋ก ๊ธฐ๋ฅ์ ์ธ์ธ ๊ฒฝ์ฐ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฏ๋ก ๋ฌด์๋ฉ๋๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 11660. ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (0) | 2020.08.23 |
---|---|
[html] ๊ณต๋ฐฑ ๋ฌธ์, ๋์ด์ฐ๊ธฐ (2) | 2020.08.22 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌธ์์ด ์์ถ(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.08.21 |
[python] SWEA - 1389. ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2020.08.20 |
[python] ๋ฐฑ์ค - 1074. Z (0) | 2020.08.19 |