뚝딱햄 탈출기

[Python] 입출력 : 2차원 리스트 입력받기, 공백없는 입력값(문자열, 숫자) 리스트에 각각 요소로 저장하기 본문

Algorithm & Data structure/알고리즘 문제 풀이

[Python] 입출력 : 2차원 리스트 입력받기, 공백없는 입력값(문자열, 숫자) 리스트에 각각 요소로 저장하기

hyrmzz1 2023. 10. 21. 17:16

2차원 리스트 입력받기

여러 줄에 걸쳐 공백 없이 입력된 입력값을 2차원 리스트로 저장하려면 어떻게 해야 할까?

 

N × M 크기의  2차원 배열을 입력받아보자.

첫 번째 줄에 행의 길이 N과 열의 길이 M이 주어지고, 두 번째 줄부터 N + 1번째 줄까지는 각 행의 요소들이 입력된다.

이때, 각 행의 요소들은 공백 없이 입력되어 있다.

4 5
00110
00011
11111
00000

import sys

# N, M을 공백을 기준으로 구분하여 입력 받기
n, m = map(int, sys.stdin.readline().rstrip().split())

# 2차원 리스트의 맵 정보 입력 받기
graph = []
for _ in range(n):
    graph.append(list(map(int, sys.stdin.readline().rstrip())))
    
print(graph)
# [[0, 0, 1, 1, 0], [0, 0, 0, 1, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0]]
import sys

# N, M을 공백을 기준으로 구분하여 입력 받기
n, m = map(int, sys.stdin.readline().rstrip().split())

# 2차원 리스트의 맵 정보 입력 받기 - 리스트 컴프리헨션 사용
graph = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(n)]
    
print(graph)
# [[0, 0, 1, 1, 0], [0, 0, 0, 1, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0]]

 


숫자 테스트 케이스 - 각각의 숫자를 리스트의 요소로 저장

한 줄로 된 테스트 케이스 입력받기

해당 포스팅에서 다룬 숫자 / 문자를 여러 줄 받는 방법과 비슷하다.

 

단, 한 줄에서 받은 숫자를 각 자리수마다 하나의 요소로 리스트에 저장해야 하는데,
아래 방식대로 하면 readline을 통해 입력받은 값은 str형이기 때문에 int()로 변환해 주면 '00110'은 '110'으로 저장된다.

import sys  
n = int(sys.stdin.readline())	# 라인 수
arr = [int(sys.stdin.readline()) for _ in range(n)]	# arr = [11111, 110]

 

00110을 [0,0,1,1,0]으로 저장하는 법은 아래와 같다.

import sys
a = list(map(int, sys.stdin.readline().rstrip()))
print(a)	# [0, 0, 1, 1, 0]

입력받은 '00110'이라는 문자열을 각각 int로 형변환해 주어 리스트에 집어넣기! 하나의 문자씩 각각 형변환해 주니 0이 온전히 리스트에 들어간다. (생각해 보면 당연하지만 숫자처럼 생긴 문자열이라 바로 떠오르지 않았다 ,, ^ㅠ^ ;;)

여러 줄로 된 테스트 케이스 입력받기

행렬 입력받을 때 (특히 인접 행렬!) 자주 쓰인다.

n = int(sys.stdin.readline().rstrip().split())	# 라인 수

matrix = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(n)]
print(matrix)
# [[0, 0, 1, 1, 0], [0, 0, 0, 1, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0]]

 

문자열 테스트 케이스 - 각각의 문자를 리스트의 요소로 저장

한 줄로 된 테스트 케이스 입력받기

# 입력값 : hyrmzz1
import sys
a = sys.stdin.readline().rstrip()	# 또는 a = list(sys.stdin.readline().rstrip())
print(list(a))	# 또는 print(a)
['h', 'y', 'r', 'm', 'z', 'z', '1']

여러 줄로 된 테스트 케이스 입력받기

그래프 알고리즘에서 (DFS, BFS에서 좌표 형태로 입력받아야 하는 유형) 자주 쓰인다.

''' 
세 줄에 걸쳐 입력받은 아래 문자열을 각 열을 요소로 행별로 리스트에 저장
D.*
...
..S
'''
n = int(sys.stdin.readline().rstrip())	# 라인 수
arr = [list(sys.stdin.readline().rstrip()) for _ in range(n)]
print(arr)
# [['D', '.', '*'], ['.', '.', '.'], ['.', 'S', '.']]

특정 문자가 나올 때까지 테스트 케이스 한 줄씩 입력받기

위의 문제처럼 입력의 마지막 줄에 특정 문자가 들어올 때까지 한 줄씩 테스트 케이스를 입력받아야 한다면,

while True: 로 조건문을 작성하고 입력값 == 특정 문자 일 경우 break; 해준다.


백준에서 문제를 풀며 만난 모든 입출력은 아래 포스팅에 정리되어 있다 !

새로운 입출력을 만날 때마다 내용이 추가되는 무한 확장 가능성의 애착 가득 포스팅 (~ ̄▽ ̄)~ㅋㅋ

2023.10.17 - [Algorithm & Data structure/문제 풀이] - [Python] 입출력 : 여러 테스트 케이스 입력, 특정 값이 들어올 때까지 입력, 리스트 요소 한 줄에 하나씩 출력

 

[Python] 입출력 : 여러 테스트 케이스 입력, 특정 값이 들어올 때까지 입력, 리스트 요소 한 줄에

프로그래머스에서만 문제 풀다가 백준에서 문제를 풀고 직면한 문제...... 바로 입력 🫥🫥🫥 기존에 입출력에 대해 정리한 글이 있지만, 다시 정리하며 머리에 넣어본다. 입력 input()이 아닌 sys.

hyrmzz1.tistory.com

 

Comments