인프런 커뮤니티 질문&답변

요가인님의 프로필 이미지
요가인

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-D

2-D 영역 범위 관련 질문드립니다.

해결된 질문

작성

·

231

0

선생님께서는 입력 받은 값

x1,x2

y1,y2로 범위를 정하고 그에 해당하는곳에 1의 값을 넣어 주었는데

그 값이 배열에서의 값과는 다른데

--> 입력이

5 7 3

0 2 4 4

1 1 2 5

4 0 6 2

다음과 같이 주어 졌을때

(0,2) ~ (4,4) 부분에 해당하는 배열의 값들을 보면

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

인데

 

왜 범위를

 for(int x = x1; x < x2; x++){

            for(int y = y1; y < y2; y++){

                a[y][x] = 1; 

다음과 같이 나누어 그 값을 바로 넣었는지 궁금합니다.

 

제 생각은 y좌표의 위치를 뒤집어서 생각하는 것이기에

모든 값들도 똑같이 뒤집어서 넣는거는 상관없어서 넣은것 같은데 맞을까요??

 

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 가인님 ㅎㅎ

0 2 4 4에 해당 하는 디버깅 코드를 넣어보면.

        for(int x = x1; x < x2; x++){
            for(int y = y1; y < y2; y++){
                cout << y << " : " << x << "\n";
                a[y][x] = 1; 

2 : 0

3 : 0

2 : 1

3 : 1

2 : 2

3 : 2

2 : 3

3 : 3

 

다음과 같이 찍히는 것을 알 수 있습니다.

즉, 가인님이 말씀하신 내용대로 들어가는 것을 알 수 있습니다.

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

요가인님의 프로필 이미지
요가인
질문자

왜 범위를

 for(int x = x1; x < x2; x++){

            for(int y = y1; y < y2; y++){

                a[y][x] = 1; 

다음과 같이 나누어 그 값을 바로 넣었는지 궁금합니다.
이거에 대한 답을 듣고싶습니다!

큰돌님의 프로필 이미지
큰돌
지식공유자

음 질문이

값을 2중 for문을 써서 넣은 이유인건가요?

요가인님의 프로필 이미지
요가인
질문자

실제 좌표의 값이랑 배열에 들어가는 값이 다른데

왜 범위를 좌표의 값으로 설정했는지가 궁금합니다!

큰돌님의 프로필 이미지
큰돌
지식공유자

실제 좌표의 값이랑 배열에 들어가는 값이 다른데

>>

0 2 4 4 라면

0, 2 ~ 4, 4 까지 들어가야 하는 것 아닌가요?

앞에서 말씀 드린 것 처럼
2 : 0

3 : 0

2 : 1

3 : 1

2 : 2

3 : 2

2 : 3

3 : 3

해당 좌표의 값이 배열에 잘 들어가는 코드입니다.

 

아 그리고 가인님 말씀을 보면

a[1][0] a[1][1] a[1][2] a[1][3]

이렇게 들어가야 한다고 했잖아요?

이거는 x, y 배열로 할 때 그렇게 들어가야 합니다.

 

근데 저는 y, x 배열로 하고 싶을 뿐이고 그걸 그대로 코드로 녹여낸 것입니다.

즉, a[2][0], a[2][1] ... 이런식으로 쌓고 싶은것이죠.

 

그리고 문제에서 주어지는 것도 y는 세로축,x는 가로축으로 의미 변경없이 이루어지기 때문에

a[y][x]로 구현해도 무방합니다.

 

감사합니다.

요가인님의 프로필 이미지
요가인

작성한 질문수

질문하기