반응형

10157

https://www.acmicpc.net/problem/10157

 

10157번: 자리배정

첫 줄에는 공연장의 격자 크기를 나타내는 정수 C와 R이 하나의 공백을 사이에 두고 차례대로 주어진다. 두 값의 범위는 5 ≤ C, R ≤ 1,000이다. 그 다음 줄에는 어떤 관객의 대기번호 K가 주어진다.

www.acmicpc.net

[정답]

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
import sys
C, R = map(int, sys.stdin.readline().split())
= [[0 for i in range(C+1)] for j in range(R+1)]
= int(sys.stdin.readline())
if K > C*R:
    print(0)
else:
    for i in range(R+1):
        a[i][C] = -1
    for j in range(C+1):
        a[R][j] = -1
    cnt = 0
    n = 1
    i, j = 00
    a[0][0= 1
    while True:
        if n == K:
            break
        else:
            if cnt == 0:
                if a[i+1][j] == 0:
                    i += 1
                    n += 1
                    a[i][j] = n
                else:
                    cnt = 1
            elif cnt == 1:
                if a[i][j+1== 0:
                    j += 1
                    n += 1
                    a[i][j] = n
                else:
                    cnt = 2
            elif cnt == 2:
                if a[i-1][j] == 0:
                    i -= 1
                    n += 1
                    a[i][j] = n
                else:
                    cnt = 3
            elif cnt == 3:
                if a[i][j-1== 0:
                    j -= 1
                    n += 1
                    a[i][j] = n
                else:
                    cnt = 0
    print(j+1, i+1)
cs

.

.

.

[풀이]

배열 입력 순서를 잘 생각해야하는 문제.

파이썬의 배열 순서와 문제의 배열 순서가 다르다.

파이썬 형태를 그대로 쓰기 위해서 시계 반대 방향으로 좌석을 지정해줄 것이다.

먼저 a[R][C]까지 0인 배열을 선언해준 뒤

R행과 C열을 -1로 설정해준다. 테두리를 둘러싸주는 느낌.

 

c == 0 일 때 아래로(i +1)

c == 1 일 때 오른쪽으로(j + 1)

c == 2 일 때 위로(i - 1)

c == 3 일 때 왼쪽으로(j - 1)

이동하며 1씩 증가하는 n값 지정.

다음 단계에서 테두리에 만나거나 이미 입력된 값에 도착하면 c를 한 단계 높여주며 순환한다.

 

n이 K와 같아지면 while 종료하고 

문제 배열 순서와 마추기 위해

j+1, i+1 출력.

 

p.s.

코드를 보면 차근차근 풀었다는 모습이 보일 것이다.

그만큼 순서대로 생각만 하면 풀 수 있는 문제다.

아직 실력이 부족해 배열 순서 구조를 떠올리는데 시간이 꽤 소요되었다.

반응형

+ Recent posts