๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฉ๋ฌธ ๊ธธ์ด

by syLim___ 2023. 6. 22.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/49994#

 

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

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

programmers.co.kr


๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๋ฐ”๋ฅผ ์™„๋ฒฝํžˆ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ƒ๋‹นํžˆ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

 

 - ์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฒŒ ๋˜๋Š” ์„ ๋ถ„์„ count

 - ์–ด๋–ค ์„ ๋ถ„์„ ์ง€๋‚œ ์ ์ด ์žˆ์œผ๋ฉด ์ค‘๋ณต ์นด์šดํŠธํ•˜์ง€ ์•Š์Œ

 - ์„ ๋ถ„์—๋Š” ๋ฐฉํ–ฅ์„ฑ์ด ์—†์Œ

 

๊ฐ x, y ์ขŒํ‘œ๊ฐ€ 0๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” 11 * 11 ํฌ๊ธฐ์˜ ์ด์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ ,

์›์ ์„ (5,5)๋กœ ๋†“๊ณ  ์‹œ์ž‘ํ–ˆ๋‹ค.

์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฐ„ ์–‘ ์ ์„ ๋ฐฐ์—ด์— ์ €์žฅํ•ด๊ฐ€๋ฉฐ ์ฒดํฌํ•ด์„œ ํ’€์—ˆ๋‹ค.

 

์ธํ’‹์œผ๋กœ ์ฃผ์–ด์ง„ dirs ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 500์ดํ•˜๋กœ ๊ฝค ์ž‘์€ ์ˆ˜์—ฌ์„œ ์‹œ๊ฐ„์ดˆ๊ณผ ๊ฑฑ์ •์„ ๋ณ„๋กœ ์•ˆ ํ•˜๊ณ  ํ’€์—ˆ์ง€๋งŒ,

๋ฐฐ์—ด์ด ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ง„๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹Œ ๋“ฏํ•˜๋‹ค.

 

python

def solution(dirs):
    table = [[0 for i in range(11)] for j in range(11)]
    move = {'L':[0,-1], 'R':[0,1], 'U':[-1,0], 'D':[1,0]}
    
    # ์›์  : 5,5
    x = 5
    y = 5
    
    # ์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฐ„ ์ขŒํ‘œ ์ˆœ์„œ๋Œ€๋กœ ๊ตฌํ•˜๊ธฐ
    visited = [(5,5)] 
    for dir in dirs:
        nx, ny = x + move[dir][0], y + move[dir][1] # ์ด๋™์ขŒํ‘œ
        if 0 <= nx <= 10 and 0 <= ny <= 10: # ๋ฒ”์œ„์ฒดํฌ
            visited.append((nx,ny))
            x, y = nx, ny

    # ์ฒ˜์Œ ๊ฑท๋Š” ๊ธธ count
    line = [(visited[i], visited[i+1]) for i in range(len(visited)-1)]
    answer = 0
    check = []
    for a,b in line:
        if (a,b) not in check and (b,a) not in check:
            answer += 1
            check.append((a,b))
    
    return answer

 

ํ’€๊ณ  ๋‚˜์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ

๊ทธ๋ƒฅ ์ฒ˜์Œ๋ถ€ํ„ฐ ์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฒŒ ๋˜๋Š” ์–‘ ๋ ์  ์ขŒํ‘œ๋ฅผ set์— ์ง‘์–ด๋„ฃ๊ณ , set๊ธธ์ด๋ฅผ 2๋กœ ๋‚˜๋ˆ„์–ด์ฃผ๋ฉด ๋˜๋Š” ๊ฑฐ์˜€๋‹ค.....!

 

์ˆ˜์ •ํ•œ ์ฝ”๋“œ

def solution(dirs):
    table = [[0 for i in range(11)] for j in range(11)]
    move = {'L':[0,-1], 'R':[0,1], 'U':[-1,0], 'D':[1,0]}
    
    # ์›์  : 5,5
    x = 5
    y = 5
    
    visited = set() # ๋ฐฉ๋ฌธํ•œ ์„ ๋ถ„
    prev = (5,5)
    for dir in dirs:
        nx, ny = x + move[dir][0], y + move[dir][1] # ์ด๋™์ขŒํ‘œ
        if 0 <= nx <= 10 and 0 <= ny <= 10: # ๋ฒ”์œ„์ฒดํฌ
            visited.add((prev,(nx,ny)))
            visited.add(((nx,ny),prev))
            prev = (nx,ny)
            x, y = nx, ny
    return len(visited)//2

 

 

728x90