일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- ARP
- 이것이 취업을 위한 코딩테스트다
- IT5분잡학사전
- 시스템 소프트웨어
- 이것이 취업을 위한 코딩 테스트다
- 컴퓨터네트워크
- 컴퓨터 동작방식
- 파이썬 정렬
- CS
- 파이썬 자료형
- 라우팅
- icmp
- 쉽게 배우는 데이터 통신과 컴퓨터 네트워크
- OSI7계층모델
- 기억장치
- sort()
- 데이터통신
- 북클럽
- RARP
- 이코테
- 데이터 통신과 컴퓨터 네트워크
- 쿠키
- 노마드코더
- data type
- 노개북
- GIT
- 자료형
- DP
- 파이썬 연산자
- 리스트
- Today
- Total
뚝딱햄 탈출기
[Python] 입출력 : 2차원 리스트 입력받기, 공백없는 입력값(문자열, 숫자) 리스트에 각각 요소로 저장하기 본문
[Python] 입출력 : 2차원 리스트 입력받기, 공백없는 입력값(문자열, 숫자) 리스트에 각각 요소로 저장하기
hyrmzz1 2023. 10. 21. 17:162차원 리스트 입력받기
여러 줄에 걸쳐 공백 없이 입력된 입력값을 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;
해준다.
백준에서 문제를 풀며 만난 모든 입출력은 아래 포스팅에 정리되어 있다 !
새로운 입출력을 만날 때마다 내용이 추가되는 무한 확장 가능성의 애착 가득 포스팅 (~ ̄▽ ̄)~ㅋㅋ