suvera-dev ๐Ÿฅฆ

Algorithm ) Implementation ๋ณธ๋ฌธ

Algorithm/CodingTest - Python

Algorithm ) Implementation

suvera 2022. 4. 1. 06:40

๐ŸŒ€ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๊ตฌํ˜„์ด๋ž€ ? ๋จธ๋ฆฟ์†์— ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ • 

- ๊ตฌํ˜„ ์œ ํ˜•์˜ ๋ฌธ์ œ๋Š” ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ ์†Œ์Šค์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค !

ex) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„๋‹จํ•œ๋ฐ ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น  ๋งŒํผ ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ, ํŠน์ • ์†Œ์ˆ˜์  ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ, ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ ํ•œ ๋ฌธ์ž ๋‹จ์œ„๋กœ ๋Š์–ด์„œ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ ๋“ฑ 

 

๐Ÿ‘‹๐Ÿป ์™„์ „ ํƒ์ƒ‰ , ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์œ ํ˜•์„ ๋ชจ๋‘ ๊ตฌํ˜„ ์œ ํ˜•์œผ๋กœ ๋ฌถ์–ด์„œ ์„ค๋ช…ํ•  ์˜ˆ์ • ! 

1. ์™„์ „ ํƒ์ƒ‰ : ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฃผ์ €์—†์ด ๋‹ค ๊ณ„์‚ฐํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

2. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ : ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•œ๋‹จ๊ณ„์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฌธ์ œ

 

๐Ÿ‘€ ๊ตฌํ˜„ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ ์‚ฌํ•ญ

๐Ÿ“Œ ํŒŒ์ด์ฌ์—์„œ ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ 

ํŒŒ์ด์ฌ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ, ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š” ์‚ฌํ•ญ์ด ์žˆ๋‹ค !

๋ฐ”๋กœ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ! 

 

๋Œ€์ฒด๋กœ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” 128~ 512MB๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œํ•œํ•˜๋Š”๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์ค‘

๋•Œ๋กœ๋Š” ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜๊ณค ํ•œ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ์—ผ๋‘์— ๋‘๊ธฐ !

๐Ÿฌ ํŒŒ์ด์ฌ์—์„œ๋Š” ์ •์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ int ์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ์ž๋ฃŒํ˜•์„ ๋ช…์‹œํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, ์‹œ์Šคํ…œ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์•„๋ž˜ ํ‘œ์™€ ์œ ์‚ฌํ•œ ํฌ๊ธฐ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค !

 

๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜(๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด) ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
1,000 ์•ฝ 4KB
1,000,000 ์•ฝ 4MB
10,000,000 ์•ฝ 40MB

ํŒŒ์ด์ฌ์€ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด์„œ ๊ตฌํ˜„์ƒ์˜ ๋ณต์žกํ•จ์ด ์ ์€ ํŽธ์ด์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋งŽ์„ ๋•Œ๋Š” ๊ผญ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ๊ณ ๋ คํ•˜๊ธฐ !! 

๋ฆฌ์ŠคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์„ ์–ธํ•˜๊ณ , ๊ทธ์ค‘์—์„œ ํฌ๊ธฐ๊ฐ€ 1,000๋งŒ ์ด์ƒ์ธ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ์ œํ•œ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๋Š” ์  ๊ธฐ์–ตํ•˜๊ธฐ ! 

 

๐Ÿ‘€  ์ฑ„์ ํ™˜๊ฒฝ

- ๋ณดํ†ต์˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ฑ„์  ์‹œ์Šคํ…œ์˜ ์‹œ๊ฐ„ ์ œํ•œ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ 

์‹œ๊ฐ„ ์ œํ•œ : 1์ดˆ

๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ : 128MB

 

์ผ๋ฐ˜์ ์ธ ๊ธฐ์—… ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ์ด์ฌ์œผ๋กœ ์ œ์ถœํ•œ ์ฝ”๋“œ๊ฐ€ 1์ดˆ์— 2,000๋งŒ ๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํฌ๊ฒŒ ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค !

 

๐Ÿฅ‘  ์˜ˆ์ œ 4-1 ) ์ƒํ•˜์ขŒ์šฐ

์—ฌํ–‰๊ฐ€ A๋Š” N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ๊ณต๊ฐ„ ์œ„์— ์„œ ์žˆ๋‹ค. ์ด ๊ณต๊ฐ„์€ 1 x 1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ์žˆ๋‹ค. 

๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์ขŒํ‘œ๋Š” (1 , 1) ์ด๋ฉฐ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ขŒํ‘œ๋Š” (N, N)์— ํ•ด๋‹นํ•œ๋‹ค. ์—ฌํ–‰๊ฐ€ a๋Š” ์ƒ, ํ•˜ , ์ขŒ, ์šฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ์ž‘์ขŒํ‘œ๋Š” ํ•ญ์ƒ (1 , 1)์ด๋‹ค. 

์—ฌํ–‰์ž a๊ฐ€ ์ด๋™ํ•  ๊ณ„ํš์ด ์ ํžŒ ๊ณ„ํš์„œ๊ฐ€ ๋†“์—ฌ์žˆ๋‹ค. ๊ณ„ํš์„œ์—๋Š” ํ•˜๋‚˜์˜ ์ค„์— ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ  L,R,U,D ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ํ˜€์žˆ๋‹ค. ๊ฐ ๋ฌธ์ž์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค 

L: ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ ์ด๋™

R: ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ ์ด๋™

U: ์œ„๋กœ ํ•œ์นธ ์ด๋™

D: ์•„๋ž˜๋กœ ํ•œ์นธ ์ด๋™ 

์ด๋•Œ, ์ •์‚ฌ๊ฐํ˜•์˜ ๊ณต๊ฐ„์„ ๋ฒ—์–ด๋‚˜๋Š” ์›€์ง์ž„์€ ๋ฌด์‹œ๋œ๋‹ค. ๊ณ„ํš์„œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ตœ์ข…์ ์œผ๋กœ ๋„์ฐฉํ•  ์ง€์ ์˜ ์ขŒํ‘œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ

 

๐Ÿฅ‘  ํ’€์ด๋ฐฉ๋ฒ•

์‹œ๊ฐ„๋ณต์žก๋„ O(N) : ์—ฐ์‚ฐํšŸ์ˆ˜ = ์ด๋™ํšŸ์ˆ˜

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์œ ํ˜• : ์ผ๋ จ์˜ ๋ช…๋ น์— ๋”ฐ๋ผ ๊ฐœ์ฒด๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋™์‹œํ‚ด 

n = int(input())
x,y = 1, 1
plans = input().split()

# L, R, U, D ์— ๋”ฐ๋ฅธ ์ด๋™ ๋ฐฉํ–ฅ
dx = [0,0,-1,1]
dy = [-1,1,0,0]
move_types = ['L','R','U','D']

# ์ด๋™ ๊ณ„ํš์„ ํ•˜๋‚˜์”ฉ ํ™•์ธ
for plan in plans:
    # ์ด๋™ ํ›„ ์ขŒํ‘œ ๊ตฌํ•˜๊ธฐ
    for i in range(len(move_types)):
        if plan == move_types[i]:
            nx = x + dx[i]
            ny = y + dy[i]
    # ๊ณต๊ฐ„์„ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ๋ฌด์‹œ
    if nx < 1 or ny < 1 or nx > n or ny > n :
        continue
    # ์ด๋™ ์ˆ˜ํ–‰
    x, y = nx, ny

print(x,y)

 

๐Ÿฅ‘  ์˜ˆ์ œ 4-2) ์‹œ๊ฐ

- ์ •์ˆ˜ N์ด ์ž…๋ ฅ๋˜๋ฉด 00์‹œ 00๋ถ„ 00์ดˆ๋ถ€ํ„ฐ N์‹œ 59๋ถ„ 59์ดˆ ๊นŒ์ง€์˜ ๋ชจ๋“  ์‹œ๊ฐ ์ค‘์—์„œ 3์ด ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋‹ค์Œ์€ 3์ด ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์„ธ์–ด์•ผํ•˜๋Š” ์‹œ๊ฐ์ด๋‹ค 

- 00์‹œ 00๋ถ„ 03์ดˆ

- 00์‹œ 13๋ถ„ 30์ดˆ 

 

๐Ÿฅ‘  ํ’€์ด๋ฐฉ๋ฒ•

๋ชจ๋“  ์‹œ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ชจ๋‘ ์„ธ์„œ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ 

=> ํ•˜๋ฃจ๋Š” 86,400 ์ดˆ๋กœ, 00์‹œ 00๋ถ„ 00์ดˆ๋ถ€ํ„ฐ 23์‹œ 59๋ถ„ 59์ดˆ ๊นŒ์ง€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์…€ ์ˆ˜ ์žˆ์Œ , 1์ดˆ์”ฉ ๋Š˜๋ฆฌ๋ฉด์„œ ๋งค ์‹œ๊ฐ์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พผ๋‹ค์Œ 3์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ! ์˜ˆ๋ฅผ ๋“ค์–ด 03์‹œ 20๋ถ„ 35์ดˆ ์ผ๋•Œ๋ฅผ ํ™•์ธํ•œ๋‹ค๋ฉด, '032035'๋กœ ๋งŒ๋“ค์–ด์„œ 3์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ! 

(์ด๋Ÿฐ ์œ ํ˜•์€ ์™„์ „ํƒ์ƒ‰ ์œ ํ˜•์œผ๋กœ ๋ถ„๋ฅ˜๋˜๊ธฐ๋„ ํ•จ , ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•ด๋ณด๋Š” ํƒ์ƒ‰ ๋ฐฉ๋ฒ•)

n = int(input())

count = 0
for i in range(n + 1):
    for j in range(60):
        for k in range(60):
            if '3' in str(i)+ str(j) + str(k):
                count += 1

print(count)

โœ”๏ธ ์‹ค์ „๋ฌธ์ œ 

1๋ฒˆ - ์™•์‹ค์˜ ๋‚˜์ดํŠธ 

ํ–‰๋ณต ์™•๊ตญ์˜ ์™•์‹ค ์ •์›์€ ์ฒด์ŠคํŒ๊ณผ ๊ฐ™์€ 8 * 8 ์ขŒํ‘œ ํ‰๋ฉด์ด๋‹ค. ์™•์‹ค ์ •์›์˜ ํŠน์ •ํ•œ ํ•œ ์นธ์— ๋‚˜์ดํŠธ๊ฐ€ ์„œ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋งค์šฐ ์ถฉ์„ฑ์Šค๋Ÿฌ์šด ์‹ ํ•˜๋กœ์„œ ๋งค์ผ ๋ฌด์ˆ ์€ ์—ฐ๋งˆํ•œ๋‹ค. 

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

๋‚˜์ดํŠธ๋Š” ํŠน์ •ํ•œ ์œ„์น˜์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ์ˆ˜ํ‰์œผ๋กœ ๋‘ ์นธ ์ด๋™ํ•œ ๋’ค์— ์ˆ˜์ง์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•˜๊ธฐ 

2. ์ˆ˜์ง์œผ๋กœ ๋‘ ์นธ ์ด๋™ํ•œ ๋’ค์— ์ˆ˜ํ‰์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•˜๊ธฐ 

 

8*8 ์ขŒํ‘œ ํ‰๋ฉด ์ƒ์—์„œ ๋‚˜์ดํŠธ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ 

์ด๋•Œ , ์™•์‹ค์˜ ์ •์›์—์„œ ํ–‰ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ์—๋Š” 1๋ถ€ํ„ฐ 8๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์—ด์˜ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ์—๋Š” a๋ถ€ํ„ฐ h ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. 

 

state = input()
row = int(state[1])
column = int(ord(state[0])) - int(ord('a')) + 1

# ์—ฌ๊ธฐ์„œ ord() ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ๋‹จ์ผ๋ฌธ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
# ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” 8๊ฐ€์ง€ ๋ฐฉํ–ฅ ์ •์˜
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]

# 8๊ฐ€์ง€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•˜์—ฌ ๊ฐ ์œ„์น˜๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
result = 0
for step in steps:
    # ์ด๋™ํ•˜๊ณ ์ž ํ•˜๋Š” ์œ„์น˜ ํ™•์ธ
    next_row = row + step[0]
    next_col = column + step[1]
    # ํ•ด๋‹น ์œ„์น˜๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์นด์šดํŠธ ์ฆ๊ฐ€
    if next_row >= 1 and next_row <= 8 and next_col >=1 and next_col <=8:
        result += 1

print(result)

์•ž์„œ ์ƒํ•˜์ขŒ์šฐ ๋ฌธ์ œ์—์„œ๋Š” dx dy ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์ด๋™ํ•  ๋ฐฉํ–ฅ์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๊ณ , ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” steps ๋ณ€์ˆ˜๊ฐ€ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ๋Œ€์‹ ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜์˜€์Œ ! 2๊ฐ€์ง€ ํ˜•ํƒœ ๋ชจ๋‘ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค ! 

 

2๋ฒˆ - ๊ฒŒ์ž„ ๊ฐœ๋ฐœ 

ํ˜„๋ฏผ์ด๋Š” ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ๋งต ์•ˆ์—์„œ ์›€์ง์ด๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœ ์ค‘์ด๋‹ค. ์บ๋ฆญํ„ฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” 1*1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ์ด๋ค„์ง„ N*M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ, ๊ฐ๊ฐ์˜ ์นธ์€ ์œก์ง€ ๋˜๋Š” ๋ฐ”๋‹ค์ด๋‹ค. ์บ๋ฆญํ„ฐ๋Š” ๋™์„œ ๋‚จ๋ถ ์ค‘ ํ•œ ๊ณณ์„ ๋ฐ”๋ผ๋ณธ๋‹ค 

 

๋งต์˜ ๊ฐ ์นธ์€ (A,B) ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , A๋Š” ๋ถ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜, B๋Š” ์„œ์ชฝ์œผ๋กœ ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜์ด๋‹ค. ์บ๋ฆญํ„ฐ๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ณ , ๋ฐ”๋‹ค๋กœ ๋˜์–ด ์žˆ๋Š” ๊ณต๊ฐ„์—๋Š” ๊ฐˆ์ˆ˜ ์—†๋‹ค. ์บ๋ฆญํ„ฐ์˜ ์›€์ง์ž„์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋‰ด์–ผ์€ ์ด๋Ÿฌํ•˜๋‹ค 

1. ํ˜„์žฌ ์œ„์น˜์—์„œ ํ˜„์žฌ ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐˆ ๊ณณ์„ ์ •ํ•œ๋‹ค

2. ์บ๋ฆญํ„ฐ์˜ ๋ฐ”๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์•„์ง ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๋‹ค์Œ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ „์ง„ํ•œ๋‹ค. ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์—†๋‹ค๋ฉด, ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค 

3. ๋งŒ์•ฝ ๋„ค ๋ฐฉํ–ฅ ๋‹ค ์ด๋ฏธ ๊ฐ€๋ณธ ์นธ์ด๊ฑฐ๋‚˜ ๋ฐ”๋‹ค๋กœ ๋˜์–ด ์žˆ๋Š” ์นธ์ธ ๊ฒฝ์šฐ์—๋Š”, ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ์นธ ๋’ค๋กœ ๊ฐ€๊ณ  1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๋‹จ , ์ด๋•Œ ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฐ”๋‹ค์ธ ์นธ์ด๋ผ ๋’ค๋กœ ๊ฐˆ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์›€์ง์ž„์„ ๋ฉˆ์ถ˜๋‹ค.

 

ํ˜„๋ฏผ์ด๋Š” ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ์บ๋ฆญํ„ฐ์˜ ์›€์ง์ž„์— ์ด์ƒ์ด ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋งค๋‰ด์–ผ์— ๋”ฐ๋ผ ์บ๋ฆญํ„ฐ๋ฅผ ์ด๋™์‹œํ‚จ ํ›„์—, ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฐฉ๋ฌธํ•œ ์นธ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ 

 

์ž…๋ ฅ 

1 ๋งต์˜ ์„ธ๋กœํฌ๊ธฐ N ๊ฐ€๋กœํฌ๊ธฐ M 

2 ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ขŒํ‘œ์™€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ 

( ๋ฐฉํ–ฅ 0,1,2,3 ๋ถ ๋™ ๋‚จ ์„œ )

3 ๋งต์ด ์œก์ง€์ธ์ง€ ๋ฐ”๋‹ค์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด N๊ฐœ์˜ ์ค„์— ๋งต์˜ ์ƒํƒœ๊ฐ€ ๋ถ์ชฝ๋ถ€ํ„ฐ ๋‚จ์ชฝ ์ˆœ์„œ๋Œ€๋กœ, ๊ฐ ์ค„์˜ ๋ฐ์ดํ„ฐ๋Š” ์„œ์ชฝ๋ถ€ํ„ฐ ๋™์ชฝ ์ˆœ์„œ๋Œ€๋กœ !

๋งต์˜ ์™ธ๊ณฝ์€ ํ•ญ์ƒ ๋ฐ”๋‹ค ( 0 ์œก์ง€, 1 ๋ฐ”๋‹ค )

4 ์ฒ˜์Œ ์œ„์น˜๋Š” ๋ฌด์กฐ๊ฑด ์œก์ง€ 

 

๐ŸŒ€ ์ „ํ˜•์ ์ธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ ! ์‚ผ์„ฑ์ „์ž ์ฝ”ํ…Œ์—์„œ ์ž์ฃผ ์ถœ์ œ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์œ ํ˜• !

๋ณ„๋„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•˜์ง„ ์•Š์ง€๋งŒ, ๋ฌธ์ œ๊ฐ€ ๊ธธ๊ณ  ๋ฌธ์ œ๋ฅผ ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜์—ฌ ์†Œ์Šค์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๋Š”๊ฒŒ ์–ด๋ ต๋‹น ! 

 

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ ํ’€์ด์˜ ์ค‘์š”ํ•œ ํ…Œํฌ๋‹‰ ! 

- ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฉํ–ฅ์„ ์„ค์ •ํ•ด์„œ ์ด๋™ํ•˜๋Š” ๋ฌธ์ œ ์œ ํ˜•์—์„œ๋Š” dx, dy ๋ผ๋Š” ๋ณ„๋„์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ฐฉํ–ฅ์„ ์ •ํ•˜๋Š” ๊ฒŒ ํšจ๊ณผ์ ์ด๋‹ค ! . 

- ํ˜„์žฌ ์บ๋ฆญํ„ฐ๊ฐ€ ๋ถ์ชฝ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์„ ๋•Œ๋Š” ๋ถ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด x์™€ y ์ขŒํ‘œ๋ฅผ ๊ฐ๊ฐ dx[0], dy[0] ๋งŒํผ ๋”ํ•œ๋‹ค.  => ํ˜„์žฌ ์œ„์น˜์—์„œ (-1,0) ๋งŒํผ ์ด๋™์‹œํ‚ค๊ธฐ ! 

 

๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ ๋ฌธ๋ฒ• -> 2์ฐจ์› ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ 

- ํŒŒ์ด์ฌ์—์„œ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•  ๋•Œ๋Š” ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋ผ๋Š” ์  ! 

๋”๋ณด๊ธฐ

๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜(list comprehension)

: ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์‹, for ๋ฐ˜๋ณต๋ฌธ, if ์กฐ๊ฑด๋ฌธ ๋“ฑ์„ ์ง€์ •ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ

  • [์‹ for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ]
  • list(์‹ for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ)
>>> a = [i for i in range(10)]        # 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> c = [i + 5 for i in range(10)]    # 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ๊ฐ’์— 5๋ฅผ ๋”ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
>>> c
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  • [์‹ for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ if ์กฐ๊ฑด์‹]
  • list(์‹ for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ if ์กฐ๊ฑด์‹)
>>> a = [i for i in range(10) if i % 2 == 0]    # 0~9 ์ˆซ์ž ์ค‘ 2์˜ ๋ฐฐ์ˆ˜์ธ ์ˆซ์ž(์ง์ˆ˜)๋กœ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
>>> a
[0, 2, 4, 6, 8]
a = [i * j for j in range(2, 10)
           for i in range(1, 10)]

๋‹ค์Œ์€ 2๋‹จ๋ถ€ํ„ฐ 9๋‹จ๊นŒ์ง€ ๊ตฌ๊ตฌ๋‹จ์„ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

 

โ–ถ2์ฐจ์› ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”

ํŒŒ์ด์ฌ์—์„œ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์ด์šฉํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค๋ฉด, ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๋Œ€์ƒ์„ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž.

arr = [[0] * 5] * 5
arr[0][0] = 5
d = [[0] * m for _ in range(n)]

-> row : n ,  col : m [0] ์œผ๋กœ ์ดˆ๊ธฐํ™” !! 

 

์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋Š” ํ•จ์ˆ˜์—์„  global ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ !

- ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜์ธ direction ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ์„ ์–ธ๋œ ์ „์—ญ๋ณ€์ˆ˜ ์ด๊ธฐ ๋•Œ๋ฌธ !

 

๋”๋ณด๊ธฐ

Python ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์— ์žˆ์–ด pass, continue break์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1.     pass : ์‹คํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋‹ค์Œ ํ–‰๋™์„ ๊ณ„์†ํ•ด์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2.     continue : ๋ฐ”๋กœ ๋‹ค์Œ ์ˆœ๋ฒˆ์˜ loop๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3.     break : ๋ฐ˜๋ณต๋ฌธ์„ ๋ฉˆ์ถ”๊ณ  loop ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋„๋กํ•ฉ๋‹ˆ๋‹ค.

# N, M ์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ
n,m = map(int, input().split())

# ๋ฐฉ๋ฌธํ•œ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋งต์„ ์ƒ์„ฑํ•˜์—ฌ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
d = [[0]* m for _ in range(n)]
# ํ˜„์žฌ ์บ๋ฆญํ„ฐ์˜ x์ขŒํ‘œ, y ์ขŒํ‘œ, ๋ฐฉํ–ฅ์„ ์ž…๋ ฅ๋ฐ›๊ธฐ
x, y, direction = map(int, input().split())
d[x][y] = 1 # ํ˜„์žฌ ์ขŒํ‘œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ

# ์ „์ฒด ๋งต ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ
array = []
for i in range(n):
    array.append(list(map(int, input().split())))

# ๋ถ, ๋™, ๋‚จ, ์„œ ๋ฐฉํ–ฅ ์ •์˜
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

# ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „
def turn_left():
    global direction
    direction -= 1
    if direction == -1:
        direction = 3

# ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์ž‘
count = 1
turn_time = 0
while True:
    # ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „
    turn_left()
    nx = x + dx[direction]
    ny = y + dy[direction]
    # ํšŒ์ „ํ•œ ์ดํ›„ ์ •๋ฉด์— ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋™
    if d[nx][ny] == 0 and array[nx][ny] == 0:
        d[nx][ny] = 1
        x = nx
        y = ny
        count += 1
        turn_time = 0
        continue
    # ํšŒ์ „ํ•œ ์ดํ›„ ์ •๋ฉด์— ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์—†๊ฑฐ๋‚˜ ๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ
    else:
        turn_time += 1
    # ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
    if turn_time == 4:
        nx = x - dx[direction]
        ny = y - dy[direction]
        # ๋’ค๋กœ ๊ฐˆ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋™ํ•˜๊ธฐ
        if array[nx][ny] == 0:
            x = nx
            y = ny
        # ๋’ค๊ฐ€ ๋ฐ”๋‹ค๋กœ ๋ง‰ํ˜€์žˆ๋Š” ๊ฒฝ์šฐ
        else:
            break
        turn_time = 0

# ์ •๋‹ต ์ถœ๋ ฅ
print(count)

 

Comments