๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] ๋ฐฉ๋ฌธ ๊ธธ์ด - Summer/Winter Coding(~2018)

๋ฟŒ์•ผ._. 2021. 9. 9. 12:59

<๋ฐฉ๋ฌธ ๊ธธ์ด>

๋ฌธ์ œ(์ถœ์ฒ˜: https://school.programmers.co.kr/learn/courses/30/lessons/49994)

 

 

๋ฌธ์ œ ํ’€์ด

 

 ์ฒ˜์Œ์— ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค 

 

 - ํ‹€๋ฆฐ ์ฝ”๋“œ

def solution(dirs):
    answer = 1

    x, y = 0, 0
    arr = []
    for i in dirs:
        check=False
        if i == 'U':
            if y < 5:
                y += 1
            else:
                check=True
        elif i == 'D':
            if y > -5:
                y -= 1
            else:
                chck=True
        elif i == 'R':
            if x < 5:
                x += 1
            else:
                check=True
        elif i == 'L':
            if x > -5:
                x -= 1
            else:
                check=True
        if check!=True:
            arr.append([x, y])
    print(arr)

    check=False
    for i in range(1, len(arr)):
        temp=arr[:i]
        cnt=0
        for j in range(len(temp)):
            if arr[i][0]==temp[j][0] and arr[i][1]==temp[j][1]:
                check=True
            else:
                cnt+=1
        if cnt==len(temp):
            answer+=1
    if check==True:
        answer+=1

    return answer

 

์˜ˆ์‹œ๋กœ ์ฃผ์–ด์ง„ 2๋ฌธ์ œ๋Š” ๋งž๋Š” ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ์ฑ„์  ๊ฒฐ๊ณผ์—์„œ ํ›„๋‘๋‘‘๐Ÿ˜ฅ

๋ญ๊ฐ€ ์ž˜๋ชป๋œ ์ฝ”๋“œ์ธ๊ฐ€ ์‚ดํŽด๋ณด๋‹ˆ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๊ฒฐ๊ตญ ๊ฒ€์ƒ‰์˜ ํž˜์„ ๋ฐ›์•˜๋‹ค...๐Ÿ˜ข

 

set์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 

์™œ ์ด๊ฑธ ์ƒ๊ฐํ•ด๋‚ด์ง€ ๋ชปํ–ˆ๋Š”์ง€ ์ถฉ๊ฒฉ์ ์ด์—ˆ๋‹ค.

 

์ตœ์ข… ์ž‘์„ฑํ•œ ๋‚˜์˜ ์ฝ”๋“œ์ด๋‹ค.

 - my solution

def solution(dirs):
    answer = 0
    
    x,y=0,0
    arr = set()

    for i in dirs: # U,D,R,L
        start_x, start_y = x, y #์‹œ์ž‘ ์œ„์น˜ update
        if i == 'U' and y < 5:
            y += 1
        elif i == 'D' and y > -5:
            y -= 1
        elif i == 'R' and x < 5:
            x += 1
        elif i == 'L' and x > -5:
            x -= 1

        if start_x==x and start_y==y: # ์ขŒํ‘œ๋ฅผ ๋ฒ—์–ด๋‚˜ ๊ฐ™์€ ์ž๋ฆฌ์— ๋จธ๋ฌผ๋ฉด 
            pass
        else: #์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋„ฃ์–ด์คŒ
            arr.add((start_x, start_y, x, y))
            arr.add((x, y, start_x, start_y))
        
    answer=len(arr)//2 #์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ €์žฅํ–ˆ์œผ๋ฏ€๋กœ ๋‚˜๋ˆ„๊ธฐ 2
    
    return answer

 

์ด ์ฝ”๋“œ๋กœ ํ†ต๊ณผํ–ˆ์ง€๋งŒ ์ด๊ฒƒ๋„ ์ž˜ ์ง  ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ๋ณธ ๊ฒฐ๊ณผ U, D, R, L์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ list๋‚˜ dict๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋” ์งง๊ฒŒ 

๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

1) set์„ ์„ ์–ธ: ์ค‘๋ณต๋œ ๊ธธ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. (์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ๋งŒ)

 

2) U, D, R, L์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑ

โ‘  ๋ฌธ์ œ์—์„œ ์ขŒํ‘œ ํ‰๋ฉด์˜ ๊ฒฝ๊ณ„๊ฐ€ (-5, 5), (-5, -5), (5, 5), (5, -5)๋ผ๊ณ  ์ฃผ์–ด์กŒ์œผ๋ฏ€๋กœ ์กฐ๊ฑด์„ ํ•จ๊ป˜ ์ž‘์„ฑ

โ‘ก ์ขŒํ‘œ ์ด๋™์—์„œ ๊ฒฝ๊ณ„ ์กฐ๊ฑด์„ ๊ฑธ์—ˆ์œผ๋ฏ€๋กœ ์‹œ์ž‘ ์œ„์น˜์™€ ์ด๋™ ์œ„์น˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” set์— ์ถ”๊ฐ€ x

โ‘ข set์— (์‹œ์ž‘ ์ขŒํ‘œ x, ์‹œ์ž‘ ์ขŒํ‘œ y, ์ด๋™ ํ›„ x, ์ด๋™ ํ›„ y), (์ด๋™ ํ›„ x, ์ด๋™ ํ›„ y, ์‹œ์ž‘ ์ขŒํ‘œ x, ์‹œ์ž‘ ์ขŒํ‘œ y)

๋ฅผ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค. (์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ๋งŒ count ํ•˜๊ธฐ ์œ„ํ•ด)

 

3) ์–‘๋ฐฉํ–ฅ์œผ๋กœ set์— ์ €์žฅํ–ˆ์œผ๋ฏ€๋กœ ์ฒ˜์Œ ๊ฐ€๋ณธ ๊ธธ์˜ ๊ธธ์ด๋Š” set์„ 2๋กœ ๋‚˜๋ˆˆ ๋ชซ


์ƒ๊ฐ๐Ÿค”

 

set์„ ํ™œ์šฉํ•˜์—ฌ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ €์žฅํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์ž๋งˆ์ž '์•„์ฐจ' ํ–ˆ๋‹ค.

๋‹ค์Œ๋ฒˆ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋‚˜์™”์„ ๋•Œ ํƒ ์•Œ์•„์ฐจ๋ฆฌ๊ณ  ํ’€ ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ

1) set ํ™œ์šฉ

2) ์–‘๋ฐฉํ–ฅ ์ €์žฅ


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, https://programmers.co.kr/learn/challenges