반응형
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())
a = [[0 for i in range(C+1)] for j in range(R+1)]
K = 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 = 0, 0
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.
코드를 보면 차근차근 풀었다는 모습이 보일 것이다.
그만큼 순서대로 생각만 하면 풀 수 있는 문제다.
아직 실력이 부족해 배열 순서 구조를 떠올리는데 시간이 꽤 소요되었다.
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준 2947] 파이썬 : 나무 조각 (0) | 2021.10.15 |
---|---|
[백준 1026] 파이썬 : 보물 (0) | 2021.10.14 |
[백준 2346] 파이썬 : 풍선 터뜨리기 (0) | 2021.10.12 |
[백준 1758] 파이썬 : 알바생 강호 (0) | 2021.10.12 |
[백준 1735] 파이썬 : 분수 합 (0) | 2021.10.11 |