CS/알고리즘_문제풀이(파이썬)

조회 알고리즘

Jedy_Kim 2021. 5. 23. 22:23
728x90

문제

세로 길이 n, 가로 길이 m 인 2차원 배열이 있다.

두 점 A, B가 인접하다는 것은 배열에서 상하좌우로 붙어있는 것을 의미한다. 이 배열의 각 인덱스에 대해 인접한 인덱스에 자신과 같은 수가 있으면 1을, 없으면 0을 출력하여라.

단, 각 행의 왼쪽 끝 열과 오른쪽 끝 열은 서로 인접해있다.

입력

첫 줄에 n, m이 주어진다.

두 번째 줄부터 n개의 줄에 각 m개의 수가 주어진다.

(3 ≤ n, m ≤ 100, 1 ≤ 수열을 구성하는 수 ≤ n X m)

출력

n줄에 각 인덱스마다 인접한 인덱스에 같은 수가 있으면 1을, 없으면 0을 출력한다.

입력의 예 1

3 5

2 3 1 1 2

1 3 2 3 4

1 2 7 3 7

출력의 예 1

1 1 1 1 1

1 1 0 1 0

1 0 0 1 0

입력의 예 2

2 5

1 2 1 3 2

1 2 1 3 2

출력의 예 2

1 1 1 1 1

1 1 1 1 1

입력의 예 3

3 7

2 2 2 3 3 3 4

1 3 1 2 1 3 1

2 4 2 4 2 3 3

출력의 예 3

1 1 1 1 1 1 0

1 0 0 0 0 1 1

0 0 0 0 0 1 1

입력의 예 4

3 3

1 2 3

4 5 6

7 8 9

출력의 예 4

0 0 0

0 0 0

0 0 0

 

#코드

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
n, m = map(int, input().split())
getInfo = [list(map(int, input().split())) for _ in range(n)]
arr = [[-1 for _ in range(110)] for _ in range(110)]
 
for i in range(n): # 행
  for j in range(m): # 열
    arr[i+1][j] = getInfo[i][j]  
    
for i in range(1, n+1): # 행
  for j in range(m):    # 열
    tempLeft = j-1
    tempRight = j+1
    
    if j == 0
      tempLeft = m-1
    if j == m-1
      tempRight = 0
    
    # 상, 하, 좌, 우
    if arr[i][j] == arr[i-1][j] or arr[i][j] == arr[i+1][j] or arr[i][j] == arr[i][tempLeft] or arr[i][j] == arr[i][tempRight]:
      getInfo[i-1][j] = 1
    else
      getInfo[i-1][j] = 0
    
for i in range(n): # 행
  for j in range(m): # 열
    print(getInfo[i][j], end=' ')
  print()
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

접시  (0) 2021.05.24
스택 구현하기  (0) 2021.05.24
2차원 조회  (0) 2021.05.23
1차원 조회  (0) 2021.05.23
밀기 알고리즘 -- 파이썬 데크(deque)  (0) 2021.05.23