We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2174๋ฒˆ: ๋กœ๋ด‡ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ - ํŒŒ์ด์ฌ

Redddy 2022. 9. 4. 14:43

๐Ÿ”ˆ ๋ฌธ์ œ

๊ฐ€๋กœ A(1≤A≤100), ์„ธ๋กœ B(1≤B≤100) ํฌ๊ธฐ์˜ ๋•…์ด ์žˆ๋‹ค. ์ด ๋•… ์œ„์— ๋กœ๋ด‡๋“ค์ด N(1≤N≤100)๊ฐœ ์žˆ๋‹ค.

๋กœ๋ด‡๋“ค์˜ ์ดˆ๊ธฐ ์œ„์น˜๋Š” x์ขŒํ‘œ์™€ y์ขŒํ‘œ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ x์ขŒํ‘œ๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ, y์ขŒํ‘œ๋Š” ์•„๋ž˜์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๊ฐ€ ๋งค๊ฒจ์ง„๋‹ค. ๋˜ํ•œ ๊ฐ ๋กœ๋ด‡์€ ๋งจ ์ฒ˜์Œ์— NWES ์ค‘ ํ•˜๋‚˜์˜ ๋ฐฉํ–ฅ์„ ํ–ฅํ•ด ์„œ ์žˆ๋‹ค. ์ดˆ๊ธฐ์— ์„œ ์žˆ๋Š” ๋กœ๋ด‡๋“ค์˜ ์œ„์น˜๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.
์ด๋Ÿฌํ•œ ๋กœ๋ด‡๋“ค์— M(1≤M≤100)๊ฐœ์˜ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ๋ช…๋ น์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ๋ช…๋ น์„ ํ•œ ๋กœ๋ด‡์—์„œ ๋‚ด๋ ธ์œผ๋ฉด, ๊ทธ ๋ช…๋ น์ด ์™„์ˆ˜๋  ๋•Œ๊นŒ์ง€ ๊ทธ ๋กœ๋ด‡๊ณผ ๋‹ค๋ฅธ ๋ชจ๋“  ๋กœ๋ด‡์—๊ฒŒ ๋‹ค๋ฅธ ๋ช…๋ น์„ ๋‚ด๋ฆด ์ˆ˜ ์—†๋‹ค. ๊ฐ๊ฐ์˜ ๋กœ๋ด‡์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช…๋ น์€ ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.


1. L: ๋กœ๋ด‡์ด ํ–ฅํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ 90๋„ ํšŒ์ „ํ•œ๋‹ค.
2. R: ๋กœ๋ด‡์ด ํ–ฅํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 90๋„ ํšŒ์ „ํ•œ๋‹ค.
3. F: ๋กœ๋ด‡์ด ํ–ฅํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์•ž์œผ๋กœ ํ•œ ์นธ ์›€์ง์ธ๋‹ค.

๊ฐ„ํ˜น ๋กœ๋ด‡๋“ค์—๊ฒŒ ๋‚ด๋ฆฌ๋Š” ๋ช…๋ น์ด ์ž˜๋ชป๋  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹น์‹ ์€ ๋กœ๋ด‡๋“ค์—๊ฒŒ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ธฐ ์ „์— ํ•œ ๋ฒˆ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ํ•ด ๋ณด๋ฉด์„œ ์•ˆ์ „์„ฑ์„ ๊ฒ€์ฆํ•˜๋ ค ํ•œ๋‹ค. ์ด๋ฅผ ๋„์™€์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
์ž˜๋ชป๋œ ๋ช…๋ น์—๋Š” ๋‹ค์Œ์˜ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

1. Robot X crashes into the wall: X๋ฒˆ ๋กœ๋ด‡์ด ๋ฒฝ์— ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ฆ‰, ์ฃผ์–ด์ง„ ๋•…์˜ ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋œ๋‹ค.
2. Robot X crashes into robot Y: X๋ฒˆ ๋กœ๋ด‡์ด ์›€์ง์ด๋‹ค๊ฐ€ Y๋ฒˆ ๋กœ๋ด‡์— ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ A, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ๋‘ ์ •์ˆ˜ N, M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๋กœ๋ด‡์˜ ์ดˆ๊ธฐ ์œ„์น˜(x, y์ขŒํ‘œ ์ˆœ) ๋ฐ ๋ฐฉํ–ฅ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๋ช…๋ น์ด ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ๋ช…๋ น์€ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋กœ๋ด‡, ๋ช…๋ น์˜ ์ข…๋ฅ˜(์œ„์— ๋‚˜์™€ ์žˆ๋Š”), ๋ช…๋ น์˜ ๋ฐ˜๋ณต ํšŒ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ฐ ๋ช…๋ น์˜ ๋ฐ˜๋ณต ํšŒ์ˆ˜๋Š” 1์ด์ƒ 100์ดํ•˜์ด๋‹ค.

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” OK๋ฅผ, ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ์œ„์˜ ํ˜•์‹๋Œ€๋กœ ์ถœ๋ ฅ์„ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ถฉ๋Œ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

 

๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค๊ณ  ๋กœ๋ด‡์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช…๋ น์˜ค๋Š”๋Œ€๋กœ ํšŒ์ „์‹œํ‚ค๊ฑฐ๋‚˜ ์ด๋™ํ•˜๊ณ  ๊ทธ๋ž˜ํ”„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ๋กœ๋ด‡๋ผ๋ฆฌ ์ถฉ๋Œํ•œ๋‹ค๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๊ตฌํ˜„ ๋ฌธ์ œ์˜€๋‹ค.

๋ฌธ์ œ์—์„œ ๊นŒ๋‹ค๋กœ์› ๋˜ ์ ์€ ์ขŒํ‘œ๊ฐ€ ์ด์ „๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ ํ˜•ํƒœ, ์ฆ‰ ์•„๋ž˜์—์„œ ๋ถ€ํ„ฐ ์œ„๋กœ ์ˆซ์ž๊ฐ€ ์ฆ๊ฐ€ํ•ด์„œ ์กฐ๊ธˆ์€ ํ—ท๊ฐˆ๋ ธ๋˜๊ฑฐ ๊ฐ™๋‹ค.

 

๋กœ๋ด‡์˜ ์œ„์น˜์™€ ๋ฐฉํ–ฅ์„ ์ €์žฅํ•  dict๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ , ๊ทธ๋ž˜ํ”„์—๋Š” ๋กœ๋ด‡์˜ ๋ฒˆํ˜ธ๋ฅผ ์ ์–ด๋‘์—ˆ๋‹ค.

ํšŒ์ „์€ list์— N, W, S, E ์ˆœ์œผ๋กœ ์ €์žฅํ•ด๋‘๊ณ  ์ธ๋ฑ์Šค ๊ณ„์‚ฐ์œผ๋กœ %4 ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์œผ๋กœ ํšŒ์ „๋ฐฉํ–ฅ์„ ์ •ํ•˜์˜€๋‹ค.

์ „์ง„ ๋ช…๋ น์€ dict ์ž๋ฃŒํ˜•์„ ๋งŒ๋“ค๊ณ  ํ‚ค ๊ฐ’์€ N, W, S, E ๊ทธ๋ฆฌ๊ณ  ๋ฐธ๋ฅ˜๋Š” ์ขŒํ‘œ๋ณ€ํ™”๋ฅผ ์ฃผ์—ˆ๋‹ค.

 

๋กœ๋ด‡์ด ์ด๋™ํ•˜์˜€๋‹ค๋ฉด ์ด์ „ ์œ„์น˜๋Š” ์ง€์›Œ์ฃผ๊ณ  ์ƒˆ๋กœ ์ด๋™ํ•œ ๊ณณ์— ๋กœ๋ด‡์˜ ๋ฒˆํ˜ธ๋ฅผ ์ ์–ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import sys
input = sys.stdin.readline
 
a,b = map(int,input().split()) # ์ขŒํ‘œ ์ •๋ณด
n,m = map(int,input().split()) # ๋กœ๋ด‡๊ฐฏ์ˆ˜, ๋ช…๋ น์–ด๊ฐฏ์ˆ˜
graph = [[0]*(a+1for _ in range(b+1)] # ๊ทธ๋ž˜ํ”„
robot = dict() # ๋กœ๋ด‡์˜ ์œ„์น˜ ๊ทธ๋ฆฌ๊ณ  ๋ฐฉํ–ฅ ๋‹ด์„ dict
move = {'N':[1,0], 'W':[0,-1], 'S':[-1,0],'E':[0,1]}
tmp = ['N','W','S','E']
res = 'OK'
for i in range(1,n+1):
    x,y,c = map(str,input().rstrip().split())
    x,y = int(x),int(y)
    graph[y][x] = i
    robot[i] = [y,x,c]
 
for i in range(m):
    ro,code,move_cnt = map(str,input().rstrip().split())
    ro = int(ro)
    nx = robot[ro][1]
    ny = robot[ro][0]
    pos = robot[ro][2]
    move_cnt = int(move_cnt)
 
    if code == 'L':
        move_cnt %= 4
        now = (tmp.index(pos)+move_cnt)%4
        robot[ro][2= tmp[now]
 
    elif code=='R':
        move_cnt %= 4
        now = (tmp.index(pos)-move_cnt)%4
        robot[ro][2= tmp[now]
    else:
        for j in range(move_cnt):
            nx = nx + move[pos][1]
            ny = ny + move[pos][0]
            # ์ธ๋ฑ์Šค ๋ฒ—์–ด๋‚œ๋‹ค๋ฉด
            if 1 > nx or nx > a or 1 > ny or ny > b:
                if res == 'OK':
                    res = f'Robot {ro} crashes into the wall'
                break
            # ์ด๋™ํ•œ ์ž๋ฆฌ์— ์ด๋ฏธ ๋‹ค๋ฅธ ๋กœ๋ด‡์ด ์žˆ๋‹ค๋ฉด
            if graph[ny][nx] != 0:
                if res == 'OK':
                    res = f'Robot {ro} crashes into robot {graph[ny][nx]}'
                break
        else:
            # ๋ณ€๊ฒฝํ•œ ์œ„์น˜ ๋กœ๋ด‡ ์ ์Œ
            graph[ny][nx] = ro
            # ์ด์ „์— ์žˆ๋˜ ์œ„์น˜ ์ง€์›€
            graph[robot[ro][0]][robot[ro][1]] = 0
        
            # dict ๋„ ๋ณ€๊ฒฝ
            robot[ro][0= ny
            robot[ro][1= nx
 
print(res)
cs

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

์ขŒํ‘œ์‹ค์ˆ˜ ์˜ˆ๋ฅผ ๋“ค์–ด graph[x][y] ๋ฅผ ์ ์–ด์•ผํ•˜๋Š”๋ฐ graph[y][x] ์ด๋Ÿฐ ์‹์œผ๋กœ ์ ๋Š” ์‹ค์ˆ˜๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ๋กœ๋ด‡ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

 

2174๋ฒˆ: ๋กœ๋ด‡ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ A, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ๋‘ ์ •์ˆ˜ N, M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๋กœ๋ด‡์˜ ์ดˆ๊ธฐ ์œ„์น˜(x, y์ขŒํ‘œ ์ˆœ) ๋ฐ ๋ฐฉํ–ฅ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๋ช…๋ น์ด ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ์ˆœ

www.acmicpc.net

๋กœ๋ด‡