Notice
Recent Posts
천천히 빛나는
백준 단계 7 : 2차원 배열 (C++) 본문
문제 풀이 전, 2차원 배열 동적할당 방법을 소개하도록 하겠다. 행이 n, 열이 m인 2차원 배열이다.
int n, m;
cin >> n >> m;
int** arr = new int* [n];
for (int i = 0; i < m; i++)
{
arr[i] = new int[m];
}
자바에서 소개했던 2차원 배열 모습인데 이렇게 생각하면 된다.
2738. N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.
#include <iostream>
#include <map>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
int arr1[101][101] = {0};
int arr2[101][101] = {0};
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> arr1[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> arr2[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << arr1[i][j] + arr2[i][j] << " ";
}
cout << "\n";
}
return 0;
}
2차원 배열 챕터라서 2차원 배열로 만들긴 했으나 1차원 배열로도 구현가능하다.
#include <iostream>
#include <map>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
int arr1[10001] = { 0 };
int arr2[10001] = { 0 };
for (int i = 0; i < n * m; i++)
{
cin >> arr1[i];
}
for (int i = 0; i < n * m; i++)
{
cin >> arr2[i];
}
for (int i = 0; i < n * m; i++)
{
cout << arr1[i] + arr2[i] << " ";
if ((i + 1) % m == 0) {
cout << "\n";
}
}
return 0;
}
1차원 배열로 구현한 코드이다.
https://katteniiki.tistory.com/32
위 티스토리에는 동적할당을 이용하여 구현한 코드가 자세히 설명되어있다.
2566. <그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int arr[9][9];
int max = -1;
int n, m;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cin >> arr[i][j];
if (max < arr[i][j]) {
max = arr[i][j];
n = i+1;
m = j+1;
}
}
}
cout << max << "\n" << n << " " << m;
return 0;
}
간단한 코드이다.
10798. 아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다. 이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다.
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
string word[5];
for (int i = 0; i < 5; i++)
{
cin >> word[i];
}
for (int j = 0; j < 15; j++)
{
for (int i = 0; i < 5; i++)
{
if (word[i].length() <= j)
{
continue;
}
cout << word[i][j];
}
}
return 0;
}
세로로 읽기 위해서 string 배열을 만들고 각 단어의 문자 하나 하나에 접근하는 방식이다.
2563. 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int num, x, y;
cin >> num;
bool paper[100][100] = { 0 };
int count = 0;
while (num--) {
cin >> x >> y;
for (int i = x; i < x+10; i++)
{
for (int j = y; j < y+10; j++)
{
if (!paper[i][j])
{
count++;
paper[i][j] = 1;
}
}
}
}
cout << count;
return 0;
}
도화지가 붙은 부분은 true로 설정해서 새롭게 붙은 부분을 하나씩 추가하여 계산하였다.
'C++ > BAEKJOON (C++)' 카테고리의 다른 글
백준 단계 9 : 약수, 배수와 소수 (C++) (0) | 2023.09.07 |
---|---|
백준 단계 8 : 일반 수학 1 (C++) (1) | 2023.09.07 |
백준 단계 6 : 심화 1 (C++) (0) | 2023.09.03 |
백준 단계 5 : 문자열 (C++) (0) | 2023.08.31 |
백준 단계 4 : 1차원 배열 (C++) (0) | 2023.08.18 |