Search

2차원 배열

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.
첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.
첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.
a = [] b = [] n,m = map(int,input().split()) for i in range(n): row = list(map(int,input().split())) a.append(row) for i in range(n): row = list(map(int, input().split())) b.append(row) for i in range(n): for j in range(m): print(a[i][j] + b[i][j], end = ' ') print()
Python
복사
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
row = [] for i in range(9): a = list(map(int, input().split())) row.append(a) max_list = [] for i in range(9): max_list.append(max(row[i])) print(max(max_list)) for i in range(9): for j in range(9): if row[i][j] == max(max_list): print(i+1, end=' ');print(j+1)
Python
복사
# 깔끔한 풀이 import sys input = sys.stdin.readline() board = [] for _ in range(9): board.append(list(map(int,input().split()))) max = -1 for i in range(9): for j in range(9): if board[i][j] > max: max = board[i][j] print(max) print(i+1, j+1)
Python
복사
심심해진 영석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다. 세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 세로로 읽는다. 다음에 두 번째 글자들을 세로로 읽는다. 이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동 하면서 동일한 자리의 글자들을 세로로 읽어 나간다. 위의 그림 1의 다섯 번째 자리를 보면 두 번째 줄의 다섯 번째 자리의 글자는 없다. 이런 경우처럼 세로로 읽을 때 해당 자리의 글자가 없으면, 읽지 않고 그 다음 글자를 계속 읽는다. 그림 1의 다섯 번째 자리를 세로로 읽으면 D1gk로 읽는다.
그림 1에서 영석이가 세로로 읽은 순서대로 글자들을 공백 없이 출력하면 다음과 같다:
Aa0aPAf985Bz1EhCz2W3D1gkD6x
칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.
총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 각 줄의 시작과 마지막에 빈칸은 없다.
# 임의의 2차원 리스트를 만들어준다. c = [[0]*15 for i in range(5)] # 5행 15열의 2차원 리스트 생성 for i in range(5): word = list(input()) # input()에 list() 를 씌워주면 각 원소별로 나뉘어서 저장된다. word_len = len(word) for j in range(word_len): c[i][j] = word[j] for j in range(15): # 열에 대해서 for i in range(5): # 1~5행을 순차적으로 돈다. if c[i][j] == 0: continue; else: print(c[i][j], end = '')
Python
복사
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다.
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다.
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
# 실제로 도화지에 색칠하는 것처럼 진행하면 된다. import sys input = sys.stdin.readline() # 먼저 도화지부터 만들기 -> 가로, 세로의 길이가 100인 도화지가 필요하므로 101x101 의 이차원 배열부터 생성 board = [[0]*101 for i in range(101)] for _ in range(int(input())): x,y = map(int,input().split()) # 색종이 붙이기 for i in range(10): # 행, 가로 길이 for j in range(10): # 열, 세로 길이 board[x+i][y+j] = 1 r = 0 for i in board: r += sum(i) print(r)
Python
복사