๐Ÿ’ก Coding Test/Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ตฌํ˜„(Implementation)

soozkim 2023. 5. 28. 21:11
์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ
 

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ - YES24

๋‚˜๋™๋นˆ ์ €์ž์˜ ์œ ํŠœ๋ธŒ ๋ผ์ด๋ธŒ ๋ฐฉ์†ก https://www.youtube.com/c/dongbinnaIT ์ทจ์ค€์ƒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ž…์‚ฌํ•˜๊ณ  ์‹ถ์€ ์นด์นด์˜ค · ์‚ผ์„ฑ์ „์ž · ๋„ค์ด๋ฒ„ · ๋ผ์ธ!์ทจ์—…์˜ ์„ฑ๊ณต ์—ด์‡ ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ์— ์žˆ๋‹ค!IT ์ทจ์ค€์ƒ

www.yes24.com

4์žฅ. ๊ตฌํ˜„

1. ์•„์ด๋””์–ด๋ฅผ ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ตฌํ˜„

๊ตฌํ˜„ : ๋จธ๋ฆฟ์†์— ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •
- ์™„์ „ ํƒ์ƒ‰ : ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฃผ์ € ์—†์ด ๋‹ค ๊ณ„์‚ฐํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
- ์‹œ๋ฎฌ๋ ˆ์ด์…˜ : ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•œ ๋‹จ๊ณ„์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ ์œ ํ˜•

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

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

- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ๋ณด๋‹ค ๋” ์ ์€ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

์ฑ„์  ํ™˜๊ฒฝ

- 1์ดˆ์— 2000๋งŒ๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ์‹คํ–‰ ์‹œ๊ฐ„ ์ œํ•œ์— ์•ˆ์ •์ ์ด๋‹ค.
- ์‹œ๊ฐ„ ์ œํ•œ๊ณผ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋จผ์ € ํ™•์ธํ•œ ๋’ค์— ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋А ์ •๋„์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ธ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ตฌํ˜„ ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•

- ํŒŒ์ด์ฌ ๊ตฌํ˜„ ๋‚œ์ด๋„๋Š” ์‰ฌ์šดํŽธ, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ๊ฐ„์€ ๊ธด ํŽธ์ด๋‹ค.
- Pypy3์€ ํŒŒ์ด์ฌ3๋ณด๋‹ค ์‹คํ–‰ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค. ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด Pypy3์„ ์ง€์›ํ•œ๋‹ค๋ฉด ์ด๋ฅผ ์ด์šฉํ•  ๊ฒƒ

์˜ˆ์ œ 4-1. ์ƒํ•˜์ขŒ์šฐ

- ์ด๋™ ํšŸ์ˆ˜๊ฐ€ n๋ฒˆ์ผ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋„‰๋„‰ํ•œ ํŽธ
- ์‹œ๋ฎฌ๋ ˆ์ด์…˜(Simulation) ์œ ํ˜•


< ๋‹ต์•ˆ ์˜ˆ์‹œ >

# 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. ์‹œ๊ฐ

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

- ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 86, 400๊ฐ€์ง€ ๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์„ ์ด์šฉํ•ด 3์ด ์‹œ๊ฐ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋„ ์‹œ๊ฐ„ ์ œํ•œ 2์ดˆ ์•ˆ์— ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

- ์ „์ฒด ์‹œ, ๋ถ„, ์ดˆ์— ๋Œ€ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 24 X 60 X 60 ์ด๋ฉฐ 3์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ๊ณ„์‚ฐ

- ์™„์ „ ํƒ์ƒ‰(Brute Forcing) ์œ ํ˜•

 

< ๋‹ต์•ˆ ์˜ˆ์‹œ >

# H๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ
n = int(input())
count = 0

for h in range(n + 1):
    for m in range(60):
        for s in range(60):
            # ๋งค ์‹œ๊ฐ ์•ˆ์— '3'์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ์นด์šดํŠธ ์ฆ๊ฐ€
            if '3' in str(h) + str(m) + str(s):
                count += 1

print(count)

์‹ค์ „๋ฌธ์ œ 2. ์™•์‹ค์˜ ๋‚˜์ดํŠธ

- ์ƒํ•˜์ขŒ์šฐ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ

- ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์—ด์— ๋‹ด๊ณ  ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•œ๋‹ค

 

< ๋‹ต์•ˆ ์˜ˆ์‹œ >

# ํ˜„์žฌ ๋‚˜์ดํŠธ์˜ ์œ„์น˜ ์ž…๋ ฅ๋ฐ›๊ธฐ
start = input()
x = ord(start[0])   # ์—ด (๋ฌธ์ž๋ฅผ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜)
y = start[1]        # ํ–‰

# ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” 8๊ฐ€์ง€ ๋ฐฉํ–ฅ ์ •์˜
move_type = [(2, 1), (-2, 1), (2, -1), (-2, -1), (1, 2), (1, -2), (-1, 2), (-1, -2)]
count = 0

# 8๊ฐ€์ง€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•˜์—ฌ ๊ฐ ์œ„์น˜๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
for i in range(8):
    nx = chr(x + move_type[i][0])
    ny = int(y) + move_type[i][1]

    # ํ•ด๋‹น ์œ„์น˜๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์นด์šดํŠธ ์ฆ๊ฐ€ํ•˜๊ณ  ์•„๋‹ˆ๋ฉด ๋ฌด์‹œํ•˜๊ณ  ๋‹ค์Œ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ง„ํ–‰
    if nx < 'a' or nx > 'h' or ny < 1 or ny > 8:
        continue
    else:
        count += 1

print(count)

์‹ค์ „๋ฌธ์ œ 3. ๊ฒŒ์ž„ ๊ฐœ๋ฐœ

- ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ

- ์‚ผ์„ฑ SW ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ์ž์ฃผ ์ถœ์ œ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์œ ํ˜•

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

 

< ๋‹ต์•ˆ ์˜ˆ์‹œ >

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)

 

728x90