본문 바로가기

알고리즘 문제풀이/코드트리(삼성 기출)

술래잡기(2022 상반기 오전 1번)

문제 링크: https://www.codetree.ai/frequent-problems/hide-and-seek/description

 

코드트리

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

2시간 넘게 맞왜틀 시전하다가(토론장에 있던 모든 예제도 다 통과) 이상한 부분 하나와 잘못한 부분 하나를 고치니까 통과가 되더라. 3시간 살짝 이내에 풀었는데, 이거 현장에서 봤으면 절대 못 풀었을 것 같다.

 

잘못했던 부분은 line 22번 while문. 이거 빼먹어서 도망칠 수 있는 도망자 중 각 좌표에서 1명씩만 움직였다.

 

이상했던 부분은 runner_move() 함수 내 주석처리한 이중for문이었는데... 알고보니 오타였다. y를 x로 잘못 썼는데 이거때문에 1시간 더 날렸다... 제발 현장에서는 이런 실수 하지 말자......

 

술래가 달팽이 모양으로 돌아가는데, 이전에 풀었던 백준 21611 - 마법사 상어와 블리자드 문제에서는 회오리 모양을 일자로 펴놓고 풀었다면, 이번에는 그럴 여건이 안 되어서 직접 달팽이 모양으로 이동하는 걸 구현했다. 사용한 변수가 엄청 많아졌는데...

  - 규칙 상 술래는 센터부터 현재 방향으로 1, 1, 2, 2, 3, 3...칸씩 이동한다.

  - 위의 1, 1, 2, 2, 3, 3...을 tag_max_move에 저장한다고 했을 때, 현재 방향으로 연속해서 이동한 횟수인 tag_cur_move가 tag_max_move에 도달할때마다 0으로 초기화시켜주고, 방향 전환을 해야한다.

  - 함수 하나로 안에서 바깥으로, 바깥에서 안으로 오는 걸 구현하려면 이거 체크하는 flag를 또 달아줘야 한다.

 

이렇게 구현하는게 맞나...? 이 부분 구현할 때는 실수 없이 한 번에 제대로 구현하긴 했는데, 너무 복잡하다는 느낌은 지울 수가 없다. 어차피 좌표 (y,x)에서는 무조건 정해진 방향대로만 움직이니까, n이 크지 않다면 n*n matrix 파두고 안->바깥, 바깥<-안일 때 해당 좌표에서 어느 방향으로 이동해야 하는지 미리 만들어두고 코드 짜도 될 것 같고...