๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

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

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

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - Summer/Winter Coding(~2018)


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

๋ฌธ์ œ ์„ค๋ช…

 

๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๋ฅผ 4๊ฐ€์ง€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์›€์ง์ด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
U: ์œ„์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ
D: ์•„๋ž˜์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ
R: ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ
L: ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ
์บ๋ฆญํ„ฐ๋Š” ์ขŒํ‘œํ‰๋ฉด์˜ (0, 0) ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์ขŒํ‘œํ‰๋ฉด์˜ ๊ฒฝ๊ณ„๋Š” ์™ผ์ชฝ ์œ„(-5, 5), ์™ผ์ชฝ ์•„๋ž˜(-5, -5), ์˜ค๋ฅธ์ชฝ ์œ„(5, 5), ์˜ค๋ฅธ์ชฝ ์•„๋ž˜(5, -5)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ, ์šฐ๋ฆฌ๋Š” ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฐ„ ๊ธธ ์ค‘ ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ dirs๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜์—ฌ
return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ

 

- dirs๋Š” stringํ˜•์œผ๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 'U', 'D', 'R', 'L' ์ด์™ธ์— ๋ฌธ์ž๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- dirs์˜ ๊ธธ์ด๋Š” 500 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

 

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

 

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

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