일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 카카오
- 넷플릭스
- 리뷰
- parametric search
- 영어
- 추천
- benefits
- Recursive
- Movie
- 영화
- BOJ
- review
- coding
- 나는솔로
- Netflix
- kakao
- 완전탐색
- 해설
- 알고리즘
- 백준
- usaco
- Greedy
- BFS
- Algorithm
- 2020
- array
- silver
- health
- 수능
- 코딩 테스트
- Today
- Total
Young
개미 본문
문제를 풀어본 후 해설을 보시면 좋습니다 !! ^ㅡ^
예상 난이도 : 5 / 10
이번 문제는 '개미'(https://www.acmicpc.net/problem/10158) 입니다.
이 문제가 좋다고 생각한 이유는 '벡터에 대해서 생각해 볼 수 있으며, 시뮬레이션을 해야 할 것 같지만
일정한 패턴(주기)가 있어서 그렇게 하지 않아도 되는 문제'에 대해서 생각해 볼 수 있기 때문입니다.
코딩 테스트에서 효율성까지 빡빡하게 보는 곳은 많이 없습니다.
하지만 효율성까지 고려해서 짜면 좋겠죠.
그리고 무엇보다 이 문제는 고등학교 수학시간에 배웠던 간단한 벡터의 성질에 대해서 생각해 볼 수 있습니다.
이 개미의 움직임을 하나하나 시뮬레이션을 해보려고 한다면 저같은 경우 골치가 많이 아플 것 같네요.
하지만 X축과 Y축의 움직임을 따로따로 생각해보면 그러지 않아도 될 것 같다는 생각을 하게 됐습니다.
그렇게 보게 되면, X축 이 끝에서 끝으로 이동하고, Y축도 그렇습니다. 벽에 부딪히면 다시 반대편으로 이동하고
이런 움직임의 연속입니다.
입력으로 들어올 수 있는 시간이 무려 200,000,000 입니다. 절대적으로 시뮬레이션으로 하려고 한다면 '1초'라는
시간 제한 이내에 해낼 수 없습니다.
T = (입력으로 들어온 시간) 이라고 한다면, T / (가로 길이) 와 T / (세로 길이) 이런식으로 계산해 주면 됩니다.
몇 번 왕복했는지에 대한 값이 나오고, %(mod) 연산으로 나머지가 있다면 그것까지 처리해 주면 되겠습니다.
추가)
조금 더 효율적인 풀이를 배웠습니다.
우선 w, h로 한정된 공간이 아닌 무한한 공간이라고 가정하여 봅시다.
그리고 일단은 T초 후에 (y+T)와 (x+T)에 도달했다고 합니다.
그런 후 Y축만 구해봅시다.
(y+T) % 2*h 이 식을 한 번 볼까요.
왜 2*h로 나눴을까? 이것은 오른쪽 벽에 부딪혀서 반사되는 것을 쉽게 계산하기 위해서 입니다.
1 2 | int temp = (y+T) % 2*h; if(temp > h) temp = 2*h - temp; | cs |
if문이 참이라면 이 뜻은 벽에 반사된 것을 고려할 것! 이라는 뜻입니다.
따라서 if 문 안의 식으로 처리해주면 됩니다.
'코딩 테스트 대비 추천 문제' 카테고리의 다른 글
Round Robin (0) | 2019.03.11 |
---|---|
LRU Caching (0) | 2019.03.10 |
CPU (0) | 2019.03.09 |
경매 (0) | 2019.03.09 |
BOJ를 체계적으로 풀어보자! (0) | 2019.02.20 |