hot3272   6년 전

원래 java 로 알고리즘 문제 풀어보다가 이제 막 c++을 배워서 c++로도 문제를 풀어보기 시작했습니다.

궁금한 점은 

자바로 풀 때는 "맵"을 입력 받을 때 밑에 처럼 했는데

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

K = Integer.parseInt(br.readLine()); 

StringTokenizer st = new StringTokenizer(br.readLine()," ");

W = Integer.parseInt(st.nextToken()); // 가로길이
H = Integer.parseInt(st.nextToken()); // 세로길이

map = new int[H][W]; // '행'이 세로길이!
visit = new int[H][W]; // 값을 초기화 시켜주지 않았을 경우 자동으로 0으로 초기화
visit[0][0] = 1;

for(int i=0;i<H;i++){
st = new StringTokenizer(br.readLine()," ");
for(int j=0;j<W;j++){
map[i][j] = Integer.parseInt(st.nextToken()); 
}}



c++ 로 풀때는 보통 

int c[201][201];
int visit[201][201][31];

 scanf("%d", &k);
    scanf("%d %d", &m, &n);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d", &c[i][j]); 


이런 식으로 맵의 최대크기를 정해놓고 채우는 식으로 푸는 것 같더라구요

c++ 에서는 이처럼 맥시멈 값을 잡아놓고 푸는 이유가 무엇인가요?

int *p = new arr[N]; 이렇게 배열이 아닌 맵에서의 동적할당은 불가능한가요? 아니면 가능하지만 편의성 때문에 맥시멈값을

 잡아놓는 건지 궁금합니다. 

 


 


sgchoi5   6년 전

vector 쓰는 게 편한 상황에서는 vector 쓰고, 2 차원 배열 쓰기 편한 상황에서는 2 차원 배열쓰면 될 것 같습니다.
알고리즘 문제 풀때에 new / delete 와 같이 동적할당 하는 것은 문제되는 것은 아니지만, 보통 잘 안 쓰고 전역 변수 많이 씁니다.
꼭 안 써도 되는 동적 메모리(new/delete, alloc/free) 보다는 쓰기 편한 전역 변수 써서 문제 해결에 집중한다고 보시면 될 것 같네요.

simm4256   6년 전

STL에 대해 알아보심이 좋을 듯 합니다.

특히 컨테이너쪽을 봐보세요.

hot3272   6년 전

아직 STL에 대해 공부하지 않아서 그런 거였군요. 더 공부해봐야겠네요. 감사합니다!

댓글을 작성하려면 로그인해야 합니다.