교안 2차원 배열 90도 회전 관련 질문
#include <bits/stdc++.h>
using namespace std;
const int n = 3;
const int m = 4;
void rotate_left_90(vector<vector<int>> &key){
int n = key.size();
int m = key[0].size();
vector<vector<int>> temp(m, vector<int>(n,0));
for(int i = 0; i<m; i++){
for(int j = 0; j<n; j++){
temp[i][j] = key[j][m-i-1];
}
}
//key.resize(m); -> @@@@@@@
//key[0].resize(n); -> @@@@@@
key = temp;
return;
}
int main(){
vector<vector<int>> a = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};
rotate_left_90(a);
for(int i = 0; i<m; i++){
for(int j = 0; j < n; j++){
cout << a[i][j] << " ";
}
cout << '\n';
}
return 0;
}안녕하세요 큰돌님 덕분에 코테준비에 힘을 얻는중입니다. 다름이 아니라 c++교안을 쭉 정독하며 이해하려 하고 있는중에, 의문점이 생겨 질문드립니다.
위 코드는 교안에 있는 rotate_left_90()을 적용한 코드입니다.
첫번째는, key.resize()에 대한 의문입니다. 구글링을 해보니 벡터는 '='로 대입하면 깊은복사가 일어난다고 합니다... 주석으로 없애고 실행해도... 깊은복사가 일어나는 것 같습니다... 그렇다면 지금 매개변수를 &key로 참조에 의한 호출로 받아 메인함수 벡터 a의 값을 변경중인데, 깊은복사가 일어나면 아예 새로운 벡터를 할당하는 것이니 형식만 맞다면 사이즈 조정을 할 필요 없지 않나요? 실제로 주석을 달아서 실행해도 값이 같게 나와서 사이즈 조정의 필요성과 제 지식이 맞는지 헷갈려 질문드립니다.
두번째는, key[0].resize(n) 부분입니다. 사이즈 조정이 필요한 상황이라고 한다면 해당 코드는 key의 첫번째요소(벡터)만 사이즈 초기화를 해주고 있는 상황이 아닌가요?? 이렇게 된다면 나머지 요소(벡터)에 해당하는 길이들은 초기화 되지 않는게 아닌가요?? 출력에는 문제가 없어서... 저렇게 첫번째 요소의 길이만 수정해도 나머지 요소(벡터)들의 길이도 수정되는건지 궁금합니다 -> 아 이 부분은 해결했습니다...! 첫번째 요소가 벡터의 높이가 되는 느낌인거군요...?
답변 1
0
안녕하세요 ㅎㅎ
첫번째는, key.resize()에 대한 의문입니다.
-> 네 맞습니다. 예리하시네요 ㅎㅎ 해당 부분 오늘내로 교안 내에 반영하도록 하겠습니다. resize는 필요없습니다.
감사합니다.
0
감사합니다. 뭔가 뿌듯하네요.
다름이 아니라 2번 문제도 확 와닿지가 않아 질문드립니다...! 위의 주석처럼
key[0].resize(n)를 보면, 첫번째 요소의 벡터 길이만 n으로 초기화 하면! 전체 열들의 길이가 n으로 초기화 되는게 아니라, 첫번째 요소 벡터의 길이만 초기화되는거 같은데,,, 전체 요소의 길이를 n으로 초기화한걸 의도하신게 아닐까요...? resize()할 때 key[0].resize(n)만 resize() 해주신 이유가 너무 궁금합니다.
0
key[0].resize(n)를 보면, 첫번째 요소의 벡터 길이만 n으로 초기화 하면! 전체 열들의 길이가 n으로 초기화 되는게 아니라, 첫번째 요소 벡터의 길이만 초기화되는거 같은데
-> 네 맞습니다. ㅎㅎ 저거는 잘못된 코드네요. 해당부분은 반복문을 사용해서 다음과 같이 수정되어야 합니다. (만약 resize를 사용할 거면)
key.resize(m);
for (int i = 0; i < m; i++) {
key[i].resize(n);
}
혼란을 드려 죄송합니다.
감사합니다.
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
41
2
2주차 개념#12 트리 순회
0
23
2
백준사이트가 종료된다고 합니다.
0
266
2
백준 서비스 종료
9
844
1
sk 하이닉스 코테 대비
0
366
2
3-G 최댓값 질문
0
50
1
모듈러 연산 값이 10이 아닌 경우도 있지 않나요?
0
82
2
3-I 코드 질문드립니다.
0
62
2
3-N 질문 있습니다.
0
66
2
학습방법
0
101
2
4-H 질문 있습니다 (코드 리뷰)
0
66
2
코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.
0
167
2
2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.
0
69
2
2주차 개념 #4-2. 인접행렬 질문있습니다.
0
64
2
1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.
0
50
2
조합 재귀 풀이 확인 해주시면 감사하겠습니다.
0
67
2
함수별 시간복잡도
0
72
2
3-h 질문입니다.
0
49
1
안녕하세요 선생님. 시간 복잡도 4번 질문있습니다.
0
53
2
1-I 문제 질문 드립니다.
0
76
2
2-P 질문입니다.
0
56
1
mac에서 시작하기 관련
0
91
2
5-Q 질문
0
63
2
풀이 코드 질문
0
64
2





