๐Ÿ“Œ ํŒŒ์ด์ฌ ์œผ๋กœ ํ’€์ด

 

๐Ÿ“Œ ๋ฌธ์ œ ๋งํฌ :

 

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

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

programmers.co.kr

 

๐Ÿ“Œ ๋ฌธ์ œ ์„ค๋ช… :

์ง€๋‚˜๋‹ค๋‹ˆ๋Š” ๊ธธ์„ 'O', ์žฅ์• ๋ฌผ์„ 'X'๋กœ ๋‚˜ํƒ€๋‚ธ ์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ๋ชจ์–‘์˜ ๊ณต์›์—์„œ ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์‚ฐ์ฑ…์„ ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. ์‚ฐ์ฑ…์€ ๋กœ๋ด‡ ๊ฐ•์•„์ง€์— ๋ฏธ๋ฆฌ ์ž…๋ ฅ๋œ ๋ช…๋ น์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•˜๋ฉฐ, ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

  • ["๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ" … ]

์˜ˆ๋ฅผ ๋“ค์–ด "E 5"๋Š” ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ํ˜„์žฌ ์œ„์น˜์—์„œ ๋™์ชฝ์œผ๋กœ 5์นธ ์ด๋™ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋กœ๋ด‡ ๊ฐ•์•„์ง€๋Š” ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ๋•Œ ๊ณต์›์„ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ์ค‘ ์žฅ์• ๋ฌผ์„ ๋งŒ๋‚˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์œ„ ๋‘ ๊ฐ€์ง€์ค‘ ์–ด๋А ํ•˜๋‚˜๋ผ๋„ ํ•ด๋‹น๋œ๋‹ค๋ฉด, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๋Š” ํ•ด๋‹น ๋ช…๋ น์„ ๋ฌด์‹œํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ณต์›์˜ ๊ฐ€๋กœ ๊ธธ์ด๊ฐ€ W, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ H๋ผ๊ณ  ํ•  ๋•Œ, ๊ณต์›์˜ ์ขŒ์ธก ์ƒ๋‹จ์˜ ์ขŒํ‘œ๋Š” (0, 0), ์šฐ์ธก ํ•˜๋‹จ์˜ ์ขŒํ‘œ๋Š” (H - 1, W - 1) ์ž…๋‹ˆ๋‹ค.

๊ณต์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด park, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด routes๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ๋ชจ๋“  ๋ช…๋ น์„ ์ˆ˜ํ–‰ ํ›„ ๋†“์ธ ์œ„์น˜๋ฅผ [์„ธ๋กœ ๋ฐฉํ–ฅ ์ขŒํ‘œ, ๊ฐ€๋กœ ๋ฐฉํ–ฅ ์ขŒํ‘œ] ์ˆœ์œผ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

๐Ÿ“Œ ์ œํ•œ ์‚ฌํ•ญ

  • 3 ≤ park์˜ ๊ธธ์ด ≤ 50
    • 3 ≤ park[i]์˜ ๊ธธ์ด ≤ 50
      • park[i]๋Š” ๋‹ค์Œ ๋ฌธ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ์‹œ์ž‘์ง€์ ์€ ํ•˜๋‚˜๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
        • S : ์‹œ์ž‘ ์ง€์ 
        • O : ์ด๋™ ๊ฐ€๋Šฅํ•œ ํ†ต๋กœ
        • X : ์žฅ์• ๋ฌผ
    • park๋Š” ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.
  • 1 ≤ routes์˜ ๊ธธ์ด ≤ 50
    • routes์˜ ๊ฐ ์›์†Œ๋Š” ๋กœ๋ด‡ ๊ฐ•์•„์ง€๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ๋กœ๋ด‡ ๊ฐ•์•„์ง€๋Š” routes์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • routes์˜ ์›์†Œ๋Š” "op n"๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, op๋Š” ์ด๋™ํ•  ๋ฐฉํ–ฅ, n์€ ์ด๋™ํ•  ์นธ์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
      • op๋Š” ๋‹ค์Œ ๋„ค ๊ฐ€์ง€์ค‘ ํ•˜๋‚˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
        • N : ๋ถ์ชฝ์œผ๋กœ ์ฃผ์–ด์ง„ ์นธ๋งŒํผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
        • S : ๋‚จ์ชฝ์œผ๋กœ ์ฃผ์–ด์ง„ ์นธ๋งŒํผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
        • W : ์„œ์ชฝ์œผ๋กœ ์ฃผ์–ด์ง„ ์นธ๋งŒํผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
        • E : ๋™์ชฝ์œผ๋กœ ์ฃผ์–ด์ง„ ์นธ๋งŒํผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      • 1 ≤ n ≤ 9

 

๐Ÿ“Œ ์ž…์ถœ๋ ฅ ์˜ˆ


์ถ”์ธก) 

์ผ๋‹จ ํ˜„์žฌ ์œ„์น˜์— ๋Œ€ํ•œ ๋ฐฐ์—ด์„ ์ €์žฅ [์—ด, ํ–‰] ๊ธฐ๋ณธ [0,0]

๊ทธ๋ฆฌ๊ณ  park ๋ฐฐ์—ด์—์„œ S์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ฐฑ์‹ ํ•ด ์ค€๋‹ค. 

๊ทธ๋ฆฌ๊ณ  routes๋ฅผ for๋ฌธ์œผ๋กœ ๋Œ๋ ค ํ•˜๋‚˜์”ฉ ๋นผ์™€์„œ ํ˜„์žฌ์œ„์น˜๋ฅผ ์ด๋™์„ ์‹œํ‚ค๋Š” ๋ฐ

๋จผ์ € ํŒ๋ณ„๋ถ€ํ„ฐ ํ•œ๋‹ค.

1. E๋‚˜ W๋ฉด ํ˜„์žฌ ์œ„์น˜์˜ ์—ด์—์„œ n๋งŒํผ E๋ฉด +, W๋ฉด -  ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๊ฐ’(x1)์ด park ์ธ๋ฑ์Šค ํ•˜๋‚˜์˜ ๊ธธ์ด๋ณด๋‹ค ๊ธธ์–ด์ง€๋ฉด ํ•ด๋‹น routes๋Š” cotinue๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ

2. N๋‚˜ S๋ฉด ํ˜„์žฌ ์œ„์น˜์˜ ํ–‰์—์„œ n๋งŒํผ S๋ฉด +, N์ด๋ฉด -  ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๊ฐ’(y1)์ด park ์ „์ฒด ๊ธธ์ด๋ณด๋‹ค ๊ธธ์–ด์ง€๋ฉด ํ•ด๋‹น routes๋Š” cotinue๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ

 

์œ„์˜ 2๊ฐ€์ง€ ํŒ๋ณ„์ด ๋ชจ๋‘ ํ†ต๊ณผํ•˜๋ฉด

์ด์ œ ์ค‘๊ฐ„ ์žฅ์• ๋ฌผ ํŒ์ •์„ ํ•ด์•ผํ•จ

์œ„์—์„œ ๊ธธ์ด ํŒ๋ณ„ํ• ๋•Œ ์ €์žฅํ•ด ๋†“์€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  

1. E๋‚˜ W๋ฉด park ํ•ด๋‹น x๋ฒˆ์งธ ์ธ๋ฑ์Šค ๊ฐ’์—์„œ ํ˜„์žฌ ์œ„์น˜์˜ x๊ฐ’๊ณผ ์ด๋™ํ›„ ๊ฐ’์ธ x1๊ฐ’ ๋ฌธ์ž์—ด ์ˆœ์„œ ์‚ฌ์ด์— X๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด routes๋Š” cotinue๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ

2. N๋‚˜ S๋ฉด ํ˜„์žฌ ์œ„์น˜์˜ y๊ฐ’๊ณผ ์ด๋™ํ›„ ๊ฐ’์ธ y1๊ฐ’ ์‚ฌ์ด์— ์ธ๋ฑ์Šค ๊ฐ’์˜ x๋ฒˆ์งธ ๋ฌธ์ž์—ด์— X๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด routes๋Š” cotinue๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ

 

์ด๋งˆ์ €๋„ ๋‹ค ํ†ต๊ณผํ•˜๋ฉด

ํ˜„์žฌ ์œ„์น˜๋ฅผ x1๊ณผ y1์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‹ค์Œ routes๋กœ ๋„˜์–ด๊ฐ„๋‹ค. 

 

์†Œ์Šค์ฝ”๋“œ) 

* 1์ฐจ)  ์‹คํŒจ: ์ •ํ™•๋„ 80์  

def solution(park, routes):
    now = [0,0]
    
    # ์‹œ์ž‘์  
    for i in range(0,len(park)):
        if 'S' in park[i]:
            now[0] = i                      # ํ–‰
            now[1] = park[i].index('S')     # ์—ด
            
            
    x1 = y1 = 0
    # Route ํŒ๋ณ„
    for route in routes :
        
        # ๊ณต์› ๋ฐ–์ธ์ง€ ํŒ๋ณ„
        if route[0] == 'E' :
            x1 = now[1] + int(route[2])
            if x1 > len(park[0])-1 :
                continue
        elif route[0] == 'W' :
            x1 = now[1] - int(route[2])
            if x1 < 0 :
                continue
        elif route[0] == 'S' :
            y1 = now[0] + int(route[2])
            if y1 > len(park)-1 :
                continue
        elif route[0] == 'N' :
            y1 = now[0] - int(route[2])
            if y1 < 0 :
                continue
                

        b_x = b_y = a_x = a_y = 0    
        # ์žฅ์• ๋ฌผ ํŒ๋ณ„
        if route[0] == 'E' or route[0] == 'W' :
            if now[1] > x1 :
                b_x = x1
                a_x = now[1]
            else :
                b_x = now[1]
                a_x = x1
                
            if 'X' in park[now[0]][b_x:a_x]:
                continue
            else :
                now[1] = x1
        else :  
            
            if now[0] > y1 :
                b_y = y1
                a_y = now[0]
            else :
                b_y = now[0]
                a_y = y1
            
            if 'X' in [ park[j][now[1]] for j in range(b_y,a_y) ]:
                continue
            else :
                now[0] = y1
                
    
    return now

* 2์ฐจ) ์„ฑ๊ณต

def solution(park, routes):
    now = [0,0]
    
    # ์‹œ์ž‘์  
    for i in range(0,len(park)):
        if 'S' in park[i]:
            now[0] = i                      # ํ–‰
            now[1] = park[i].index('S')     # ์—ด
            
    x1 = y1 = 0
    # Route ํŒ๋ณ„
    for route in routes :
        
        # ๊ณต์› ๋ฐ–์ธ์ง€ ํŒ๋ณ„
        if route[0] == 'E' :
            x1 = now[1] + int(route[2])
            if x1 > len(park[0])-1 :
                continue
        elif route[0] == 'W' :
            x1 = now[1] - int(route[2])
            if x1 < 0 :
                continue
        elif route[0] == 'S' :
            y1 = now[0] + int(route[2])
            if y1 > len(park)-1 :
                continue
        elif route[0] == 'N' :
            y1 = now[0] - int(route[2])
            if y1 < 0 :
                continue

        b_x = b_y = a_x = a_y = 0    
        # ์žฅ์• ๋ฌผ ํŒ๋ณ„
        if route[0] == 'E' or route[0] == 'W' : 
            if now[1] > x1 :
                b_x = x1
                a_x = now[1]
            else :
                b_x = now[1]+1
                a_x = x1+1
                
            if 'X' in park[now[0]][b_x:a_x]:
                continue
            else :
                now[1] = x1
        else :  
            if now[0] > y1 :
                b_y = y1
                a_y = now[0]
            else :
                b_y = now[0]+1
                a_y = y1+1

            if 'X' in [ park[j][now[1]] for j in range(b_y,a_y) ]:
                continue
            else :
                now[0] = y1
                
    return now

 

 

๋ฆฌ๋ทฐ) 

1์ฐจ์—์„œ ์‹คํŒจํ–ˆ๋˜ ๊ด€๊ฑด์€ X ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ๊ตฌ์—ญ์„ ์ž˜ ํŒŒ์•…ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค.

ํ˜„์žฌ ์œ„์น˜๋Š” ํŒ๋ณ„์—์„œ ์ œ์™ธํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ใ… 

ํŠนํžˆ ์‚ฌ๋ฐฉํŒ”๋ฐฉ ๋‹ค ์žฅ์• ๋ฌผ์ด๋ผ ์›€์ง์ด์ง€ ๋ชปํ•  ๋•Œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

ํ˜„์žฌ ์œ„์น˜๋ฅผ ํฌํ•จ ์‹œ์ผœ ๋ฒ„๋ฆฌ๋ฉด์„œ S๋Š” X๊ฐ€ ์•„๋‹ˆ๋‹ค ๋ณด๋‹ˆ XํŒ๋ณ„ํ•  ๋•Œ OK X์—†์Œ ํ•ด๋ฒ„๋ฆฌ๊ณ  ์›€์ง์—ฌ๋ฒ„๋ฆฌ๋Š” ์‚ฌํƒœ๊ฐ€!

๊ทธ๋ž˜์„œ XํŒ๋ณ„ํ• ๋•Œ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ œ์™ธํ•˜๋‹ˆ ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ๋‹ค

 

๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ช… ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์„๊ฑฐ ๊ฐ™์•„ ์ฐพ์•„๋ณด๋‹ˆ BFS๋กœ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. BFS๋ฅผ ๊ณต๋ถ€ํ•ด์„œ ๋‹ค์‹œ ํ’€์–ด๋ณด๋Š” ๊ฑธ๋กœ

 

'Coding Test > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Programmers] ํ”„๋ฆฐํ„ฐ  (0) 2023.04.11
Programmers] n^2 ๋ฐฐ์—ด ์ž๋ฅด๊ธฐ  (0) 2023.04.03
Programmers] ๋ง์น ํ•˜๊ธฐ  (0) 2023.03.28
Programmers] ๊ทค ๊ณ ๋ฅด๊ธฐ  (0) 2023.03.28
์ˆœ์—ด  (0) 2023.03.18

+ Recent posts