23. 2차원리스트, 지뢰찾기

Joy·2020년 3월 3일
0

2차원 리스트

만들기

리스트 = [[값, 값], [값, 값], [값, 값]]

접근

리스트[세로인덱스][가로인덱스]
리스트[세로인덱스][가로인덱스] = 값

반복문으로 리스트 생성

a = []    # 빈 리스트 생성
 
for i in range(10):
    a.append(0)    # append로 요소 추가
 
print(a)

반복문으로 2차원리스트

a = []    # 빈 리스트 생성
 
for i in range(3):
    line = []              # 안쪽 리스트로 사용할 빈 리스트 생성
    for j in range(2):
        line.append(0)     # 안쪽 리스트에 0 추가
    a.append(line)         # 전체 리스트에 안쪽 리스트를 추가
 
print(a)

세로 크기만큼 반복하면서 안쪽 리스트로 사용할 빈 리스트 line을 만듭니다.
그다음에 가로 크기만큼 반복하면서 line에 append로 0을 추가합니다. 바깥쪽 반복문에서는 다시 append로 전체 리스트 a에 안쪽 리스트 line을 추가하면 됩니다.

표현식으로

>>> a = [[0 for j in range(2)] for i in range(3)]
>>> a
[[0, 0], [0, 0], [0, 0]]

접근

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

문제: 지뢰찾기

표준 입력으로 2차원 리스트의 가로(col)와 세로(row)가 입력되고 그 다음 줄부터 리스트의 요소로 들어갈 문자가 입력됩니다. 이때 2차원 리스트 안에서 *는 지뢰이고 .은 지뢰가 아닙니다. 지뢰가 아닌 요소에는 인접한 지뢰의 개수를 출력하는 프로그램을 만드세요.

col, row = map(int, input("입력: ").split())

가로 세로 input 받기

matrix = []
for i in range (row):
     matrix.append(list(input("리스트: ")))

빈 리스트 생성하고 가로 만큼 리스트 붙이기

for i in matrix:
    for j in i:
        print(j, end=' ')
    print()

받은 리스트 그대로 출력하는 코드

for i in range(row):           
    for j in range(col):
        if matrix[i][j] == "*":
            print(matrix[i][j], sep='', end='')
        else:
            count = 0
            for x in range(i - 1, i + 2):      
                for y in range(j - 1, j + 2):
                    if x < 0 or y < 0 or x >= row or y >= col:
                        continue
                    
                    elif matrix[x][y] == "*":
                        count += 1
            print(count, sep='', end='')
            
    print()

i j 를 for 반복으로 훑으면서 matrix[i][j]값이 * 과 같으면 그대로 출력
그렇지 않으면, count = 0 변수를 주고 x, y변수를 i,j 주위 +-1 씩을 훑으면서 주위가 지뢰면 count 하나씩 증가. (이때 훑을 때 범위 지정해줘야함. x,y가 0보다 작을 수 없음. 등)
마지막에 이걸 하나로 print

정리

리스트 메서드

인덱스로 범위를 지정하여 리스트 조작하기

리스트[len(리스트):] = [값] # 리스트 끝에 값이 한 개 들어있는 리스트 추가

                               # 리스트.append(값)과 같음

리스트[len(리스트):] = [값, 값] # 리스트 끝에 다른 리스트 연결

                               # 리스트.extend([값, 값])과 같음

del 리스트[인덱스] # 특정 인덱스의 값 삭제, 리스트.pop(인덱스)와 같음
del 리스트[:] # 시작 인덱스와 끝 인덱스를 생략하여 리스트의 모든 값을 삭제, 리스트.clear()와 같음

리스트(튜플)와 반복문

for 변수 in 리스트: # 반복하면서 요소를 꺼내옴
반복할 코드

for 인덱스, 요소 in enumerate(리스트): # 반복하면서 인덱스와 요소를 꺼내옴
반복할 코드

for 인덱스 in range(len(리스트)): # 리스트의 길이로 반복
리스트[인덱스] # 인덱스로 요소에 접근

while 인덱스 < len(리스트): # 리스트의 길이로 반복
리스트[인덱스] # 인덱스로 요소에 접근
인덱스 += 1

리스트(튜플) 표현식

리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트(튜플)를 생성

profile
roundy

0개의 댓글