해결전략 변경하기_17406. 배열 돌리기

·2일 전
0

백준 알고리즘

목록 보기
269/272

배울 점

  • tuple 의 tie 로 get 하는 방법
  • tuple set 하는 방법 : make_tuple
  • 문제 해결 전략을 반대로 진행하자.
  • 순열이 이루어진 후 회전 완료한 상태에서 계산하는 것이므로 ,
    복사본을 가지고 회전해야 함. -> 원본에 영향 주면 안됨.

작은 부분에서 큰 부분으로

문제 해결전략을 만들었는데, 코드 작성하기에 복잡하다 싶으면,
다른 방법으로 생각해보자.

  • 편협한 시선으로 문제를 바라봤다.
    좌상 좌표 , 우하 좌표를 만들어서 진행하면 되지 않을까?
    그런데 작은 사각형 어떻게 처리할까? 에 대한 고민을 함..
    -> 결국 해결 못함.

첫번째 생각.
: 큰 쪽에서부터 작은쪽으로 진행하려고 함.

  • (1,2) 에서 (5,6) 지점까지 돌린 후 ,
  • 작은 사각형 (2,3) 에서 (4,5) 까지를 어떻게 코드로 작성할까? 생각을 함.

다른 방법으로 접근해야 한다.

  • 그냥 3,4,2 를 중심으로 해서 생각하기만 하면 되었다.
    -> (3,4) 를 기준으로 해서 s가 2이므로 0에서부터 2까지 증가시키면서 시작 pos와 끝 pos를 다르게 설정하면 된다.

작은 부분에서부터 큰 부분으로 진행하면 쉽다.

어떻게 돌릴것인가? : 공통점을 찾아보자.

  • 왼쪽으로 가는 친구들은

  • 아래로 가는 친구들은

  • 왼쪽으로 가는 친구들

  • 위로 향하는 친구들이고

rotate 함수를 사용하자.

-> 동일한 방향으로 가는 친구들을 순서에 맞게 vector에다가 넣고, 회전 1회 진행하고, 본래의 vector 순서에 맞게끔 대입하면 된다.

  • 코드를 어떻게 작성할까?
    : 4개를 분리해서 생각해보면, 고정되는 부분과 변경되는 부분이 있다.
    이를 염두해서 작성하자.

  • 이렇게 작성함.

  • 1) 일단 넣고 회전하자.

  • 2) 회전한 결과를 다시 원본에다가 넣자.

주의할 점.

  • 원본을 가지고 순열을 하는 식으로 진행하기 때문에 원본에 영향을 주면 안된다.

  • 순열 만들어진 상황에서 vTemp 만들고, 그거를 넣어서 진행함.

-> 출력하면 이렇게 나온다.

profile
🔥🔥🔥

0개의 댓글