삼성전자 20상반기 코테 풀이(1) - 어른상어
문제 설명
삼성전자 올 상반기 공채 SW 테스트 문제였던 “어른 상어” 문제를 풀어보려 한다.
이 문제의 주요 내용은 다음과 같다.
- N x N 크기의 격자에서 M개의 칸에 상어가 한마리씩 들어가있고, 맨 처음 모든 상어는 자신의 위치에 자신의 냄새를 뿌린다.
- 1초 마다 모든 상어가 상하좌우 인접한 칸 중 냄새가 없는 먼저 인접한 칸으로 이동하고, 이동한 칸에 냄새를 뿌린다.
냄새는 상어가 K번 이동하면 사라진다
- 상어가 이동방향을 결정할 때 인접한 모든 칸에 냄새가 있는 경우, 자신의 냄새가 있는 칸의 방향으로 정한다. 이떄 가능한 칸이 여러개 있수 있는데, 그런 경우에는 특수한 우선순위를 따른다.
우선순위는 상어마다 다르고, 같은 상어라도 현재 보고있는 방향에 따라 다르다 상어가 맨 처음 보고 있는 방향은 입력으로 주어지고 그 후에는 방금 이동한 방향이 보는 방향이 된다.
- 모든 상어가 이동한 후 한칸에 여러마리 상어가 있게 되면, 가장 작은 번호 상어를 제외한 상어들은 모두 격자 밖으로 쫓겨난다.
- 이 과정을 반복할 때, 1번 상어만 격자에 남게 되기까지 몇 초가 걸리는지 구하는 프로그램을 작성하시오.
- 자세한 문제 설명은 아래 링크에서 볼 수 있다
https://www.acmicpc.net/problem/19237
풀이방법
삼성 코테는 어려운 알고리즘을 생각해서 풀기보다는 주어진 조건을 모두 충족하는 깔끔한 풀이를 작성할 수 있도록.
코딩 전에 문제풀이 방법에 대해 정리를 잘하는 것이 중요하다.
코드가 지저분해지는 순간 ‘아 .. 내가 잘못 풀고 있구나’ 생각하면 된다 ㅎㅎ
- 현재 map 정보를 저장한 상태에서
- 각 상어들의 이동을 계산하고
- 모든 상어들의 이동을 계산한 후에 map에 상어의 이동 정보를 업데이트 해준다.
헤갈림 주의) 각 상어들이 이동할 때마다 현재 map정보를 업데이트하면 안된다..이 점만 주의해서 코드를 작성하면 잘 돌아간다~
- 사용 언어: C++
댓글남기기