백준 문제/기타

알아두면 좋은 것

goldpig 2024. 3. 27. 10:53
728x90

맵 입력 받기

파이썬으로 코딩테스트를 준비하다 C++로 봐야하는 상황이 생겼다. 준비 하는 과정에서 맵을 입력 받는 부분이 헷갈렸던 경험이 있어서 이렇게 기록해 둔다.

4 6
101111
101010
101011
111011

먼저 해당 맵을 입력 받을 때 파이썬 코드는 다음과 같다.

n, m = map(int, input().split())
graph = []
for _ in range(n):
    graph.append(list(map(int, input())))

하지만 C++ 코드는 다음과 같다. 처음에는 왜 이런식으로 받는지 헷갈렸지만 일단은 이해하고 암기를 해야할 거 같다.

int n,m;
int graph[50][50];

cin >> n >> m; // 크기 입력받기
for (int i = 0; i < n; i++){
    string s; cin >> s; // 행 입력 받기
    for (int j = 0; j < m; j++){
        graph[i][j] = s[j] - '0'; // 행 별 좌표값 저장, 좌표값들은 문자 형태이기 때문에 정수로 변환
        }
    }
3 4 6
....
.T..
....

위 문자열에 대한 맵을 받는 코드는 각각 다음과 같다.

n,m,k = map(int, input().split())
# 1
graph = [list(input()) for _ in range(n)]
# 2
graph = []
for _ in range(n):
    graph.append(list(input()))
int n,m,k;
(1<=n,m<=50)
int graph[50][50]

cin >> n >> m >> k;
for (int i = 0; i < n; i++){
    for (int j=0; j < m; j++){
        cin >> graph[i][j];
        }
    }

맵 초기화 하기

문제를 풀다보면 2차원 배열을 초기화 하는 경우가 많은데, 이것의 차이를 보면 다음과 같다. 먼저 C++ 코드를 보자

#include <cstring>
int graph[50][50];

// 0으로 2차원 배열 초기화 하기
memset(graph, 0, sizeof(graph))

이제 python 을 살펴보자

n,m = map(int, input().split())
graph = [[0] * m for _ in range(n)]

2차원 배열 초기화

1. 

n = 4
graph = [[[]] * n for _ in range(n)]
[[], [], [], []]
[[], [], [], []]
[[], [], [], []]
[[], [], [], []]


4 4
0 0 2 0
0 0 1 0
0 0 1 2
0 2 0 0
2 1 1
3 2 3
2 2 1
4 1 2

for i in chess:
	print(i)
for i in horse:
	print(i)

[[], [], [], []]
[[0, 2], [0, 2], [0, 2], [0, 2]]
[[1], [1], [1], [1]]
[[3], [3], [3], [3]]
[1, 0, 0]
[2, 1, 2]
[1, 1, 0]
[3, 0, 1]

서로 다른 2차원 배열이다. 주의하자!

n, k = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
# 말의 번호를 저장할 리스트
chess = [[[] for _ in range(n)] for _ in range(n)]
# 말의 위치와 방향을 저장할 리스트
horse = []
for i in range(k):
	x,y,d = map(int, input().split())
	horse.append([x-1,y-1,d-1])
	# 위치에 말의 번호를 저장
	chess[x-1][y-1].append(i)


4 4
0 0 2 0
0 0 1 0
0 0 1 2
0 2 0 0
2 1 1
3 2 3
2 2 1
4 1 2

for i in chess:
	print(i)
for i in horse:
	print(i)
    
[[], [], [], []]
[[0], [2], [], []]
[[], [1], [], []]
[[3], [], [], []]
[1, 0, 0]
[2, 1, 2]
[1, 1, 0]
[3, 0, 1]

 

728x90