Problem : 원판 돌리기
유형 : 구현
문제 해석
- 원판을 돌린다.
- 인접한 것을 삭제한다.
- 인접한 것이 없다면 삭제하지 않고 평균을 구한다.
- 평균에 맞춰서 조건에 맞춰 증감 연산을 진행한다.
문제 재해석
- 단순 구현 문제이다.
- 해석한 그대로 구현 하면 된다
해결 전략
- 범위가 좁으므로, 따로 전략 없이 시키는 대로 구현하면 된다.
- 원판의 모양은 배열로 표시할 수 있다.
- 행은 원판의 번호
- 열은 원판 내 번호의 위치
설계(30), 구현 (70)
- 원판을 돌리는 것은
rotate
함수를 이용했다.- 이를 위해 입력받을때
vector
에 보관했다.
- 이를 위해 입력받을때
- 인접한 것을 확인하는 것은 4방면 탐색을 통해 확인한다.
- 인접해서 지워질 숫자는 visit 배열에 표시해둔다.
- 지워진 것이 하나도 없다면 평균을 구하고, 증감 연산을 진행한다.
주의할 점
- 2번 4번을 돌린다면, 인덱스는 0번 3번을 돌려야 한다.
- 배수에 해당하는 원판을 전부 다 돌린 후에 삭제나 평균값 비교 작업이 들어가야 한다.
- 평균은 정수가 아닌 실수로 계산한다.
- 처음부터 인접한 숫자가 주어진 원판이 입력으로 들어올 수 있다.
- 원판 내 숫자가 총 4개일때 0번 인덱스와 3번인덱스가 인접 할 수 있다.
- 인접하는 것들을 바로 지워버리면 안된다.
- 3번이 2번과 인접하여 지웠는데 1번과 2번도 인접해 있다면 1번은 지워져야 하지만 지워질 수 없게 된다.
코드
1 |
|
피드백
- 문제 이해를 한번에 제대로 못했다.
- 주의할 점에서 나열한 부분 중 대부분을 처음 설계할 때 놓쳤었다.
- 이 때문에 구현 도중 수정이 잦았고, 구현 시간이 굉장히 길어졌었다.
- 입력부분에서 처음에 vector에 넣어야하는데 배열처럼 넣는 실수를 했다.