๐Ÿถ Programming/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€๊ธฐ

2021 ์นด์นด์˜ค ์ฑ„์šฉ์—ฐ๊ณ„ํ˜• ์ธํ„ด์‹ญ Lv2. ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ

์ง€ ์› 2022. 9. 11. 20:43

2021 ์นด์นด์˜ค ์ฑ„์šฉ์—ฐ๊ณ„ํ˜• ์ธํ„ด์‹ญ 

Lv2. ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ

https://programmers.co.kr/learn/courses/30/lessons/81302

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๐Ÿ”ธ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

๋Œ€๊ธฐ์‹ค์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฏ€๋กœ, P๊ฐ€ ๋“ฑ์žฅํ–ˆ์„ ๋•Œ ๊ฑฐ๋ฆฌ๋‘๊ธฐ ์กฐ๊ฑด์„ ์•ˆ์ง€ํ‚จ ์ƒํ™ฉ์„ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ

  • ๋ฐ”๋กœ ์ธ์ ‘ํ•œ ์œ„์น˜์— P๊ฐ€ ๋“ฑ์žฅํ•  ๋•Œ
  • 2์นธ ๋–จ์–ด์ง„ ๊ฐ€๋กœ,์„ธ๋กœ ์œ„์น˜์— P๊ฐ€ ๋“ฑ์žฅํ•˜๋Š”๋ฐ ์‚ฌ์ด์— X๊ฐ€ ์—†์„ ๋•Œ
  • 1์นธ ๋Œ€๊ฐ์„ ์— P๊ฐ€ ๋“ฑ์žฅํ•˜๋Š”๋ฐ ๊ฐ€๋กœ,์„ธ๋กœ 1์นธ์— X๊ฐ€ ์—†์„ ๋•Œ

๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ช‡๊ฐœ ์•ˆ๋˜๊ณ , ์ƒํ™ฉ์ด ๋”ฑ๋”ฑ ์ •ํ•ด์ ธ ์žˆ์–ด์„œ ๊ทธ๋ƒฅ ์ผ์ผํžˆ for, if๋ฌธ ์ž‘์„ฑํ•ด ์คฌ์Œ!

๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ ์–ด์„œ ๊ดœ์ฐฎ์€๋ฐ ์ปค์ง€๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

def solution(places):
    answer = []
    for i in places:
        x, y = 0, 0
        if check(i, x, y) == True : answer.append(1)
        else: answer.append(0)
    return answer

def check(place, x, y):
    for i in place:
        y = 0
        for j in i:
            if j == "P":
                for a, b in [0,1], [1,0], [0,-1],[-1,0]:
                    if x+a<0 or x+a>4 or y+b<0 or y+b>4: continue
                    if place[x+a][y+b] == "P":
                        return False
                for a, b, c, d in [0,2,0,1], [0,-2,0,-1], [2,0,1,0], [-2,0,-1,0]:
                    if x+a<0 or x+a>4 or y+b<0 or y+b>4: continue
                    if place[x+a][y+b] == "P":
                        if place[x+c][y+d] != "X":
                            return False
                for a, b, c, d, e, f in [1,1,0,1,1,0], [1,-1,1,0,0,-1], [-1,1,0,1,-1,0], [-1,-1,-1,0,0,-1]:
                    if x+a<0 or x+a>4 or y+b<0 or y+b>4: continue
                    if place[x+a][y+b] == "P":
                        if place[x+c][y+d] != "X" or place[x+e][y+f] != "X":
                            return False
                y += 1
            else: y += 1
        x += 1
    return True

๐Ÿ”‘ Key Point

๐Ÿ”ธ x, y๋ฅผ ๋‚ด๊ฐ€ ์ž„์˜๋กœ ์ง€์ •ํ•œ๊ฑด๋ฐ ํ—ท๊ฐˆ๋ ค์„œ ๋ช‡๋ฒˆ ๋‹ต์ด ์ด์ƒํ•˜๊ฒŒ ๋‚˜์™”๋‹ค ์ž˜ ์ฒดํฌํ•˜๊ธฐ

๐Ÿ”ธ A or B != C ์™€ A != C or B != C ๋Š” ๋‹ค๋ฅด๋‹ค

๐Ÿ”ธ ์ฒ˜์Œ์— ๊ฒฝ์šฐ์˜ ์ˆ˜ ํ•œ๊ฐ€์ง€๋ฅผ ๊ณ ๋ ค ์•ˆํ•ด์„œ ํ‹€๋ ธ์—ˆ๋‹ค..ใ…  ๋ฌธ์ œ ์ฒ˜์Œ ํ’€ ๋•Œ ์ƒ๊ฐ๋‚˜๋Š” ๊ฑด ๊ผผ๊ผผํ•˜๊ฒŒ ์ž˜ ์ •๋ฆฌ ํ•ด๋‘๊ณ , ๋‚˜์ค‘์— ๊ตฌํ˜„ํ•  ๋ถ€๋ถ„์ด๋ผ๋ฉด ์ฃผ์„์œผ๋กœ ๊ผญ ์ ์–ด๋‘๊ฑฐ๋‚˜ pass๋กœ ํ‘œํ˜„ํ•ด๋‘์ž.