๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

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

๊ฐœ๋ฐœ์ž HOON 2022. 9. 13. 22:40

๋ฌธ์ œ ์„ค๋ช…

 

๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๋ฅผ 4๊ฐ€์ง€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์›€์ง์ด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • U: ์œ„์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ
  • D: ์•„๋ž˜์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ
  • R: ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ
  • L: ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๊ฐ€๊ธฐ

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

 

์˜ˆ๋ฅผ ๋“ค์–ด, "ULURRDLLU"๋กœ ๋ช…๋ นํ–ˆ๋‹ค๋ฉด

  • 1๋ฒˆ ๋ช…๋ น์–ด๋ถ€ํ„ฐ 7๋ฒˆ ๋ช…๋ น์–ด๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์›€์ง์ž…๋‹ˆ๋‹ค.
  • 8๋ฒˆ ๋ช…๋ น์–ด๋ถ€ํ„ฐ 9๋ฒˆ ๋ช…๋ น์–ด๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์›€์ง์ž…๋‹ˆ๋‹ค.

์ด๋•Œ, ์šฐ๋ฆฌ๋Š” ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฐ„ ๊ธธ ์ค‘ ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์˜ˆ์‹œ์—์„œ ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ธ ๊ธธ์ด๋Š” 9์ด์ง€๋งŒ, ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋Š” 7์ด ๋ฉ๋‹ˆ๋‹ค. (8, 9๋ฒˆ ๋ช…๋ น์–ด์—์„œ ์›€์ง์ธ ๊ธธ์€ 2, 3๋ฒˆ ๋ช…๋ น์–ด์—์„œ ์ด๋ฏธ ๊ฑฐ์ณ ๊ฐ„ ๊ธธ์ž…๋‹ˆ๋‹ค)

 

๋‹จ, ์ขŒํ‘œํ‰๋ฉด์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๋ช…๋ น์–ด๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, "LULLLLLLU"๋กœ ๋ช…๋ นํ–ˆ๋‹ค๋ฉด

  • 1๋ฒˆ ๋ช…๋ น์–ด๋ถ€ํ„ฐ 6๋ฒˆ ๋ช…๋ น์–ด๋Œ€๋กœ ์›€์ง์ธ ํ›„, 7, 8๋ฒˆ ๋ช…๋ น์–ด๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ 9๋ฒˆ ๋ช…๋ น์–ด๋Œ€๋กœ ์›€์ง์ž…๋‹ˆ๋‹ค.

์ด๋•Œ ์บ๋ฆญํ„ฐ๊ฐ€ ์ฒ˜์Œ ๊ฑธ์–ด๋ณธ ๊ธธ์˜ ๊ธธ์ด๋Š” 7์ด ๋ฉ๋‹ˆ๋‹ค.

 

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


์ œํ•œ์‚ฌํ•ญ

 

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

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

์ž…์ถœ๋ ฅ ์˜ˆ #1
๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #2
๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.


ํ’€์ด ์ฝ”๋“œ

def move(x, y, direction):
    before_x = x
    before_y = y
    
    if direction == 'U':
        if y < 5:
            y += 1
    elif direction == 'D':
        if y > -5:
            y -= 1
    elif direction == 'L':
        if x > -5:
            x -= 1
    elif direction == 'R':
        if x < 5:
            x +=1
            
    return before_x, before_y, x, y

    
def solution(dirs):
    answer = 0
    log = {}
    x, y = 0, 0
    for d in dirs:
        before_x, before_y, x, y = move(x, y, d)
        if before_x != x or before_y != y:
            key1 = "{}, {}, {}, {}".format(before_x, before_y, x, y)
            key2 = "{}, {}, {}, {}".format(x, y, before_x, before_y)
            if key1 in log or key2 in log:
                continue
            else:
                log[key1] = True
                log[key2] = True
                answer += 1
        
    return answer

 

๊ตฌํ˜„ ๋ฌธ์ œ์ด๋ฉฐ, ํ•ด์‹œ๋ฅผ ํ™œ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

๋งŒ์•ฝ (0,0)์—์„œ (0,1)๋กœ ์ด๋™ํ–ˆ๋‹ค๋ฉด, (0,0)→(0,1)์ด๋‚˜, (0,1)→(0,0)์ด๋‚˜ ๊ฐ™์€ ๊ธธ์„ ์ง€๋‚œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ key1, key2๋กœ ์ด๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ๊ธฐ์กด์— ๊ฐ”๋˜ ๊ธธ์„ ์˜๋ฏธํ•˜๋Š” ํ•ด์‰ฌ๋ฅผ log ๋ณ€์ˆ˜๋กœ ์ƒ์„ฑํ–ˆ๋‹ค.

 

์ง€๋‚˜๊ฐ€์ง€ ์•Š์•˜๋‹ค๋ฉด ๋กœ๊ทธ์— ์ €์žฅํ•˜๊ณ  answer += 1์„ ํ•ด์ค€๋‹ค.

๊ทธ ์™ธ์—๋Š” ํฌ๊ฒŒ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์—†๋‹ค.