백준 8911번 거북이 파이썬 해설/코드 (실버2, 쉬운 구현 연습 문제)
코드만 궁금한 분은 여기 링크 눌러주세요!!
처음에 대충 보고, 헐... 돌아다닌 넓이를 구하라고? 라고 생각하고 미친문제라고 생각했는데 다시 문제조건을 제대로 보니, 움직인 영역을 모두 포함하는 최소 직사각형의 넓이를 구하라고 한다. 쉬운 문제이다. 웬만큼 코딩테스트 연습 했다고 하는 사람들은 이정돈 20~30분안에 풀어야 할듯. 나는 전에 비슷한 문제 풀어봤었는데 앞쪽에 미친조건인줄 알고 10분동안 멍때려서 30분걸림;
문제 푸는 논리
1. F 전진, B후진, L/R 방향전환을 각각 순회하면서 거북이가 움직이는 모든 좌표(영역)를 저장한다.
2. 해당 영역에서 가장 왼쪽/오른쪽/위/아래인 x,y값을 각각 찾아 맨오른쪽-맨왼쪽 * 맨위-맨아래 하면 끝.
나는 2348ms이 나와서 사실 코드 속도가 그렇게 빠른 편은 아닌데 아마도 내가 매번 영역을 새로 이동할 때마다 끝쪽 좌표값을 업데이트 한게 아니라 우선 영역을 모두 저장해둔 뒤 zip(*list)그리고 min/max를 통해서 한번에 가장 끝 상하좌우값을 찾아내다보니 그부분에서 시간이 다소 소요된것같다. 근데 뭐 잘 풀렸으니까.. 참고로 zip(*list) 이거는, [[1,2], [3,4], [5,6]]과 같은 리스트를 [1,3,5], [2,4,6] 이런식으로 바꿔주는 함수이다. 알아두면 유용하게 쓸 수 있다. 파이썬은 정말 특이한게 map이나 zip같은 함수가 있어서 특이한..것들도 아주 간단하게 코딩할 수가 있다. 물론 나도 map이나 zip이나 combinations같은건 개인적으로 잘 쓰는함수가 아니라서 매번 사용법을 디버깅 해보면서 알아내서 쓰긴 하지만 대충 꼴을 외워두면 나중에 활용하기 좋다.
이정도는 진짜 쉬운 문제라서 네카라쿠배같은 메인 회사를 목표로 하지 않는다고 하더라도 it직무 코딩테스트를 연습중이라면 30분 이내로 풀 수 있어야 한다고 생각한다. 나 같은 경우는 전에 softeer에서 비슷한 문제를 푼 적이 있어서 더 쉽게 풀었다.
오랜만에 풀었더니 뭔가 어색해.. 어려운 문제는 못 풀것같다. 내일부터 다시 꾸준히 코딩테스트 연습을 할거긴 한데 아마 일이 좀 바빠서 2~3일에 한개정도 할 듯 하다.