


이 문제는 어찌저찌 맞긴했지만, 내 풀이가 매우 매우 매우 매우 매우 매우 매우 매우 매우 비효율적이었을 뿐더러 배운 것도 매우 많은 문제였기에 가져와봤다.
이 문제의 핵심은
어떻게
공백(사실은 공백이 아니지만) 을 처리할 것 이냐?
이다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
char arr[5][15];
for (int i=0;i<5;i++) fill(arr[i]+0, arr[i]+15, '+');
string s;
for (int i=0;i<5;i++) {
getline(cin,s);
for(int j=0;j<s.size();j++) {
arr[i][j]=s[j];
}
}
for (int i=0;i<15; i++) {
for (int j=0;j<5;j++) {
if(arr[j][i] != '+') cout << arr[j][i];
}
}
return 0;
}
실행하면 정답 처리가 되긴하나 문제가 매우 많다.
문제를 하나 하나 따지기엔 너무 문제점이 많아서...그냥 훨씬 더 효율적인 코드를 보면서 설명하는 것이 나을 것 같다.
#include <iostream>
using namespace std;
int main() {
char arr[5][15] = {};
for(int i=0;i<5;i++) cin >> arr[i];
for (int i=0;i<15;i++) {
for(int j=0;j<5;j++) {
if(arr[j][i] != '\0') cout << arr[j][i];
}
}
return 0;
}
일단 길이 부터 매우 짧고, 한 눈에 봐도 아주 코드가 간결하다.
char 자료형은 참 신기하게도, 2가지 모습을 가진다.
'a' 도 char 97 도 둘다 char 자료형 이다.
또한 둘은 정확히 동일하다.
'a'는 표면적인 형태이고,char 97은 내부적인 형태로 생각하면 된다.
코드에 'a'라고 되있더라도 이는 내부적으로 char 97 인 것이다.
char arr[5][15] = {};
이렇게 하면 char 배열이 어떤 값으로 초기화될까?
다들 알다시피 char 0 으로 초기화된다.
그렇다면 char 0은 무엇일까? '\0' 이다. (\0의 ASCII 코드는 0 이다)
따라서 위의 방식으로 초기화하면 char 배열이 전부 '\0' 으로 초기화된다.
이를 이용해 해당 칸의 데이터가 '\0' 인지 확인함으로써 배열의 해당 인덱스가 빈 칸 인지 아닌지 확인이 가능하다.
arr (2차원 배열)
│
├── arr[0] (1차원 배열: int[4])
│ ┌─────────┬─────────┬─────────┬─────────┐
│ │ arr[0][0]│ arr[0][1]│ arr[0][2]│ arr[0][3]│
│ │ 10 │ 20 │ 30 │ 40 │
│ └─────────┴─────────┴─────────┴─────────┘
│
├── arr[1] (1차원 배열: int[4])
│ ┌─────────┬─────────┬─────────┬─────────┐
│ │ arr[1][0]│ arr[1][1]│ arr[1][2]│ arr[1][3]│
│ │ 50 │ 60 │ 70 │ 80 │
│ └─────────┴─────────┴─────────┴─────────┘
│
└── arr[2] (1차원 배열: int[4])
┌─────────┬─────────┬─────────┬─────────┐
│ arr[2][0]│ arr[2][1]│ arr[2][2]│ arr[2][3]│
│ 90 │ 100 │ 110 │ 120 │
└─────────┴─────────┴─────────┴─────────┘
이렇듯, 위의 경우 arr[1]은 1행의 배열을 나타낸다.
arr[i]는 2차원 배열을 이루는 char 배열중 하나이다. 따라서 위의 코드를 실행하면, 입력이 char 배열 타입으로 arr[i]에 들어간다.
예를들어보자,
C++ Stream Buffer에 afzz가 있다면 -> 이는 ['a','f','z','z','\0'] 의 형태로 arr[i]에 들어가게된다.
유튜브에 찾아보니,,, 효율적인 코딩 테스트 준비를 위해서는
풀이 제출 전
풀이 제출 후
이렇게 해야한다고한다.
한달 내로 다시 풀수 있을진 모르겠지만 앞으로도 계속해서 다른 사람의 코드를 보며 다양한 풀이 방식을 흡수해야겠다. 다른 사람들의 코드를 보는것이 나에게 정말 많은 도움이 되는것이 느껴진다.