Python

[코딩도장] Unit.23 | 2차원 리스트 사용하기 | 23.7 심사문제(난이도 극상) 코드

토오오끼 2021. 9. 10. 22:56
728x90
반응형

> Unit.23 2차원 리스트 사용하기 <

 

- 2차원 리스트 생성

2차원 리스트는 가로×세로로 이루어져 있으며 행(row)과 열(column) 모두 0부터 시작한다. 

https://dojang.io/mod/page/view.php?id=2291

2차원 리스트의 요소에 접근하거나 값을 할당할 때는 리스트 뒤에 [ ](대괄호)를 두 번 사용해서 [ ] 안에 세로(row) 인덱스와 가로(column) 인덱스를 지정한다.

https://dojang.io/mod/page/view.php?id=2291

 

- 반복문 사용하여 2차원 리스트의 요소를 모두 출력하기

for문을 두 번 사용해서 2차원 리스트의 요소를 모두 출력할 수 있다.

for range로 세로, 가로 크기를 넣으면 인덱스로 사용할 수 있다. 

a = [[10, 20], [30, 40], [50, 60]]
 
for i in range(len(a)):            #i는 세로 크기
    for j in range(len(a[i])):     #j는 가로 크기
        print(a[i][j], end=' ')    #요소 접근
    print()
    
>>> 10 20 
30 40 
50 60

 

while문을 한 번만 사용하여 2차원 리스트의 요소를 출력할 수도 있다.

a = [[10, 20], [30, 40], [50, 60]]
 
i = 0
while i < len(a):    #반복할 때 리스트의 세로 크기를 사용
    x, y = a[i]      #요소 두 개를 한꺼번에 가져옴
    print(x, y)
    i += 1           #인덱스를 1 증가시킴
    
  
>>> 10 20
30 40
50 60

 

while문을 두 번 사용하여 2차원 리스트의 요소를 출력하는 방법은 for문과 거의 동일하다.

a = [[10, 20], [30, 40], [50, 60]]
 
i = 0
while i < len(a):           #i는 세로 크기
    j = 0
    while j < len(a[i]):    #j는 가로 크기
        print(a[i][j], end=' ')
        j += 1              #가로 인덱스를 1 증가시킴
    print()
    i += 1                  #세로 인덱스를 1 증가시킴
    
    
>>> 10 20 
30 40 
50 60

 

 

23.7 심사문제 : 지뢰찾기

이 심사문제는 지금까지 심사 문제 중 가장 어렵다고 되어있었다. 역시나 어려웠고 나름대로 코드를 짰고 실행도 잘 되었는데 점수는 0점이었다. 입력 받는 부분이 코딩도장에서 원하는 방식이 아니라 점수를 받지 못한 것 같다. 

row, col = map(int, input().split())

matrix = []
for i in range(row):
    matrix.append(list(input()))
    
print()


row, col = map(int, input().split())
matrix = []
for i in range(row):
    matrix.append(list(input()))
print()
for i in range(row):
    for j in range(col):
        cnt = 0
        if matrix[i][j] == ".":
            if i != 0 and j != 0: 
                if matrix[i-1][j-1] == "*": cnt += 1
            if i != row-1 and j != col-1:
                if matrix[i+1][j+1] == "*": cnt += 1
            if i != 0:
                if matrix[i-1][j] == "*": cnt += 1
            if i != 0 and j != col-1:
                if matrix[i-1][j+1] == "*": cnt += 1
            if j != 0:
                if matrix[i][j-1] == "*": cnt += 1
            if i != row - 1 and j != 0:
                if matrix[i+1][j-1] == "*": cnt += 1
            if j != col -1:
                if matrix[i][j+1] == "*": cnt += 1
            if i != row -1:
                if matrix[i+1][j] =="*": cnt += 1
            matrix[i][j] = cnt
            print(matrix[i][j], end="")
        else:
            print(matrix[i][j], end="")
    print()
#위의 코드를 좀 더 간단하게 바꾼 버전

row, col = map(int, input().split())

matrix = []
for i in range(row):
    matrix.append(list(input()))
    
print()
    
for i in range(row):
    for j in range(col):
        cnt = 0
        if matrix[i][j] == ".":
            for y in range(i-1, i+2):
                for x in range(j-1, j+2):
                    if not (y < 0 or x < 0 or y >= row or x >= col):
                        if matrix[y][x] == "*":
                            cnt += 1
            matrix[i][j] = cnt
            print(matrix[i][j], end="")
        else:
            print(matrix[i][j], end="")
    print()

 


https://github.com/YOOHYOJEONG/dojang_python

 

GitHub - YOOHYOJEONG/dojang_python

Contribute to YOOHYOJEONG/dojang_python development by creating an account on GitHub.

github.com

 

728x90
반응형