#include <iostream>
using namespace std;
int main()
{
int row, col, add;
cin >> row >> col;
// 2차원 배열 동적할당 하면서 입력 값으로 저장
int** mat = new int*[row]; //행 할당
for (int i = 0; i < row; i++) {
mat[i] = new int[col]; //열 할당
for (int j = 0; j < col; j++) {
cin >> mat[i][j];
}
}
// 두번째 배열 값은 첫번째 배열에 바로 더함
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cin >> add;
mat[i][j] += add;
}
}
// 출력
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cout << mat[i][j]<<" ";
}
cout << "\n";
}
// 메모리 해제
for (int i = 0; i < row; i++) {
delete[] mat[i];
}
delete[] mat;
return 0;
}
★할 때마다 까먹는 2차원 배열 동적할당/해제,,, 행과 열을 나누어서 for문 한 번으로 각각 할당하고 해제하는 것을 잊지 말자!! (아님 까먹을 때마다 찾던가......)
#include <iostream>
using namespace std;
char arr[5][15]; //전역 변수
int main()
{
for (int i = 0; i < 5; i++) {
cin >> arr[i];
}
for (int j = 0; j < 15; j++) {
for (int i = 0; i < 5; i++) {
if (arr[i][j] != NULL) {
cout << arr[i][j];
}
}
}
return 0;
}
★처음에는 문자열을 입력받을 때부터 cin>>arr[i][j];로 하려고 했다. 그런데 그러려면 입력에서도 조건을 걸어야 해서 다른 풀이를 찾아보았다. 알고 보니까 그냥 arr[i]로 해서 행 자체로 입력받으면 되는 것이었다. 그럼 나머지 칸은 NULL이 될 것이다. ★그런데 실행해 보니, 문자열이 출력된 후 그 이상한 값의 한자,,,,가 이어서 출력되었다. 얘도 찾아보니까 지역 변수로 배열을 선언한 뒤 행 자체로 입력받으면, 채워지지 않은 열 칸은 쓰레기 값이 되어서 그런 모양이다. c++에서는 전역 변수로 선언하면 자동으로 초기화된다고 해서 그렇게 수정하니 정상적으로 출력되었다. ★참고로 이 문제는 string 배열로도 풀 수 있었다. 코드는 아래와 같은데, 마지막 출력 조건에서 NULL값을 찾는 게 아니라 해당 string(행)의 길이까지만 출력하도록 하는 것이었다. char과 string을 비교해 보면 역시나 string이 조금 더 메모리를 차지하는 것을 알 수 있었다. 아래: string 배열 방법 / 위: char 배열 방법
#include <iostream>
#include <string>
using namespace std;
int main()
{
string arr[5];
for (int i = 0; i < 5; i++) {
cin >> arr[i];
}
for (int j = 0; j < 15; j++) {
for (int i = 0; i < 5; i++) {
if (arr[i].length() > j) {
cout << arr[i][j];
}
}
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
bool arr[101][101] = {}; //칠했는지 체크하는 용
int n, w, h, count = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> w >> h;
for (int j = h+10; j > h; j--) {
for (int k = w; k < w + 10; k++) {
if (!arr[j][k]) { //처음 칠할 때만 카운트
arr[j][k] = 1;
count++;
}
}
}
}
cout << count;
return 0;
}
☆이 문제는 처음 보고 일단 멍 때림,,, 이걸 뭐 다 더한 뒤 빼야 되는 건지 수학 공식이 필요한지 쓸데없는 고민을 하다가 이번 단계가 2차원 배열이라는 것을 떠올리다... 그래서 색종이를 한 칸씩 나누어서 덮을 때마다 bool 배열에 체크를 하는 식으로 구현하였다. 원래 다 칠한 다음에 밑에 다시 for문으로 검사를 하였는데, 그럴 필요 없이 배열에 이미 기록이 저장되어 있으니까 칠할 때 if문으로 비어있을 때만 칠하면서 동시에 카운트하는 식으로 하면 코드가 훨씬 간결해질 수 있다. 7단계도 끝~!!!