작성
·
50
0
안녕하세요
알고리즘 교안 > 1.12 코딩테스트 필수로직 > 1차원 배열회전 관련 공부를 하다 질문사항이 생겨 문의 드립니다.
// 반시계방향 문제
//{1, 2, 3, 4, 5, 6} -> {1, 3, 4, 5, 2, 6}
rotate(v.begin() + 1, v.begin() + 2, v.begin() + 5);
// 시계방향 문제
// {1, 2, 3, 4, 5, 6, 7} -> {5, 6, 7, 1, 2, 3, 4}
rotate(v.rbegin(), v.rbegin() + 2, v.rend()) // 6 7 1 2 3 4 5
저는 반시계방향 문제에서는 middle값이 v.begin()이 1을 가리키고 두칸 이동해서 3을 가리킨다고 이해했고
시계방향에서도 동일하게 v.rbegin()이 7을 가리키고 두칸 이동해서 5를 가리켜서 결과가 5, 6, 7, 1, 2, 3, 4 가 나올 것으로 기대했는데, 6, 7, 1, 2, 3, 4, 5 가 나오더라구요 ..
반시계방향 문제는 제가 이해한 방식으로 여러 다른 문제 풀어도 결과가 동일하게 나오는데 시계방향 문제에서는 제가 이해한 방식으로는 원하는 결과값이 나오지를 않는데, 어느 부분이 잘못된건지 알 수 있을까요?
답변 2
1
안녕하세요 ㅎㅎ
시계방향에서도 동일하게 v.rbegin()이 7을 가리키고 두칸 이동해서 5를 가리켜서 결과가 5, 6, 7, 1, 2, 3, 4 가 나올 것으로 기대했는데, 6, 7, 1, 2, 3, 4, 5 가 나오더라구요
>> 만약 6, 7 .. 을 원하시면 + 3을 하시면 됩니다. 이 이유는 rotate의 매개변수를 보시면 됩니다. rotate의 경우 두번째 매개변수를 포함하지 않고 그 이전까지 돌립니다.
즉, begin(), begin() + 2라고 했다면 첫번째, 2번째 까지만 돌리는 것이죠.
[는 포함한다.
)는 포함하지 않는다는 기호입니다.
반시계방향 문제는 제가 이해한 방식으로 여러 다른 문제 풀어도 결과가 동일하게 나오는데
>>
{1, 2, 3, 4, 5, 6} -> {1, 3, 4, 5, 2, 6}
이부분은 +1 은 2 부터시작 -> +5는 5까지의 범위를 의미합니다.
{1, 2, 3, 4, 5, 6}
여기서 +1에서 +2까지를 돌리기 때문에
{1, 3, 4, 5, 2, 6}
가 됩니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요!
답변 감사히 잘 읽어봤지만, 제가 궁금한 지점이 아직 해결되지 않아서 다시 질문드립니다 ㅠㅠ
rbegin() + 3을 하면 {5, 6, 7, 1, 2, 3, 4} 가 나오더라구요...
반시계방향으로 돌려보면 (begin() + 3) {4, 5, 6, 7, 1, 2, 3} 이 나오고요..
v.begin() + 3 => 1부터 오른쪽으로 3칸 이동, 4가 회전지점
v.rbegin() + 3 => 7부터 왼쪽으로 3칸 이동, 4가 회전지점이라 생각했는데, 5가 회전지점인 이유가 궁금합니다.....
제가 어느 부분에서 막힌 건지 도와주시면 감사하겠습니다
안녕하세요 ㅎㅎ
v.rbegin() + 3 => 7부터 왼쪽으로 3칸 이동, 4가 회전지점이라 생각했는데, 5가 회전지점인 이유가 궁금합니다.....
>> 회전지점을 중심으로 볼 게 아니라 회전영역을 중심으로 봐주시면 됩니다. ㅎㅎ
rotate()는 [first, last) 영역의 요소 중 [first, middel) 을 [middle, last) 뒤에 놓는 함수입니다.
rotate(v.rbegin(), v.rbegin() + 3, v.rend());
여기서 first와 last는 rbegin()과 rend()입니다.
{1, 2, 3, 4, 5, 6, 7}
이 영역 전부가 됩니다.
여기서
[first, middle)은 가 됩니다.
{1, 2, 3, 4, 5, 6, 7}
자 앞의 영역을 다음의 영역 앞단에 두는 것이죠.
{1, 2, 3, 4, 5, 6, 7}
그렇게 해서 다음과 같은 결과가 되게 됩니다.
{5, 6, 7, 1, 2, 3, 4}
이부분은 교안내에 보강해놓도록 하겠습니다. :)
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.