harry832   1년 전

preview

백준사이트에 올라와 있는 문제가 아니고 c++책에 있는 문제를 풀어보던 와중에 질문이 생겨서 물어보게 되었습니다.

혹시 사이트에 올라와 있는 문제만 질문이 가능하다면, 바로 말씀해주세요! 바로 글 삭제하도록 하겠습니다. ㅠㅠㅠㅠㅠ

아직 초보라 뭔가 머릿속에 떠오르는 생각과 실제 구현이 많이 다르네요 ㅠㅠㅠ

문제는 기준좌표1개와 입력 받은 n개의 좌표들이 있고 입력받은 n개 좌표가운데 기준좌표와 k번째(제가 입력해줘야 되는 값)로 가까운 좌표를 구하는 문제입니다.  

기준좌표로부터 입력받은 좌표들간 거리는 정렬을 했는데 이제 반대로 역으로 거슬러 올라가는게 어렵더라구요 ㅠㅠㅠ pair형은 처음써봐서 어떻게 주소를 참조해야하는지 잘 몰라서 검색하다가 어쩔 수 없이 고수님들께 질문을 드렸습니다. 

제가 궁금한 부분은 거리까지는 정렬을 완료하였는데 정렬된 거리가 원래 어떤 좌표로 부터 나왔는지를 어떻게 찾으면 될까요? 뭔가 느낌상으로는 포인터배열을 쓰면 될 거 같은데....또 맞는지 확신이 없네요 ㅠㅠㅠㅠㅠㅠ

감사합니다!

rnjstpgns91   1년 전

문제를 제가 잘 이해했는지 모르겠는데, 제가 이해한 내용은 기준 좌표로부터 n개의 좌표 값들을 입력받고 거리순으로 정렬까지 하였는데 이 거리에 해당되는 좌표를 찾는 것에서 막힌다 라고 이해해도 될까요?

위와 같은 문제에서 저라면

struct point

{

   int x, y, dist;

};

를 선언한 뒤에 dist를 기준으로 정렬하면 쉽게 찾을 수 있을 것 같습니다.

harry832   1년 전

네 말씀하신 부분이 맞습니다! 혹시 조금만 더 자세하게 설명해주실 수 있으실까요?? ㅠㅠ

어떻게 주소를 참조할건지 방안이 떠오르지 않네요 ㅠㅠ pair형 주소를 어떻게 가져와야 할지...ㅠㅠ 

rnjstpgns91   1년 전

제가 pair를 잘 쓰지 않아 익숙하지 않고 필요할 땐 struct로 쓰기에 struct로 설명드리겠습니다.

위와 같은 구조체를 만들고 vector<point> v 생성(좌표 및 거리)

v에 27~30 line을 통해 x, y 값을 입력하고 x, y값을 받으면 기준 좌표로부터 dist값을 구할 수 있으니 구해서 v.push_back({x, y, dist}) 형태로 넣습니다.

여기까지하면 37 line에 있는 sort를 하게 되는데 여기서 sort의 기준은 struct point의 dist가 되므로 비교함수 cmp를 만들어서

sort(v.begin(), v.end(), cmp)를 하게 되면 거리순으로 정렬됩니다. 이 다음에는 v 벡터에 이미 x, y값이 들어있으므로 호출만 하면됩니다.

44번째 줄에서 cout<<v[k].x << " " << v[k].y 를 하게 되면 x, y의 좌표가 출력됩니다.

비교함수를 이용한 sort방법은 아래 링크 예제3번이 참고가 될 것 같습니다.

https://blockdmask.tistory.com...

 

harry832   1년 전

감사합니다! ㅠㅠㅠ 제가 C++은 처음이라 두가지만 더 여쭤봐도 될까요???

저는 이렇게 이해했는데 ㅠㅠㅠ 

기준 좌표말고 계속해서 입력하는 좌표부분에서 에러가 나더라구요 ㅠㅠㅠ 

값을 어떻게 해야 넣어줄 수 있을까요??

rnjstpgns91   1년 전

11번째에 선언된 벡터는 벡터의 크기가 정해져있고 선언만 되어 있습니다. v[0], v[1] 등이 없는 상태이기에 23번째줄에서 벡터의 i번째에 요소에 접근할 때 문제가 생깁니다.

해결방법은 17~19번째처럼 벡터의 처음 크기를 지정해주는 겁니다. v(n)으로 생성하면 0~N-1의 인덱스를 가진 벡터가 생기기 때문에접근이 됩니다.

질문자님께서는 n을 먼저 입력받고 싶으니 이런방법보단 제가 위에 작성한 v.push_back 을 이용하시는게 더 좋을 것 같습니다. 벡터의 멤버함수를 검색해보시면 도움이 될 듯 싶습니다.

결론은 int x, y를 선언하고 cin >> x >> y 를 통해 값을 할당해주고 v.push_back({x, y})를 통해 넣어주시면 됩니다.

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