[백준 14867 : 물통 ]
BFS를 사용하면 쉽게 풀 수 있는 문제
처음 문제를 접했을때 A와 B의 물통의 MAX값이 10만이라서 이차원 배열도 생성안되고 어떻게 해야하나 고민했었다.
그러다가 처음 시도해본건 그냥 VISIT배열 없이 계속 돌리다가 찾으면 종료시키고 count변수를 하나 둬서 count가 몇 천이 넘어가면 그냥 -1 출력했는데
역시 이런 야매방법은 통하지 않는다. 메모리초과와 시간초과 틀렸습니다가 골고루 나왔었다.
다음으로 생각했던 방법은
해쉬값을 이용하는 것이었다. 현재 A의 물 양에 100만을 곱한다 + 현재 B의 물 양 을 더한다.
그리고 이 수를 해싱해서 충돌은 VECTOR에 넣었는데 시간초과+메모리초과 가났다.
어떻게해야될까?
사실 간단하다.
이 물통의 경우의 수는 네가지이다.
A = 어떤 값 | B = 0
A = 어떤 값 | B = B_MAX
A = 0 | B = 어떤 값
A = A_MAX | B = 어떤 값
이런 네가지 경우를 체크함수로 만들면된다.
어떤 값은 0~100000 일테고 경우는 네 가지 이므로
VISIT[100001][4] = {0,}으로 선언하면된다.
BFS 알고리즘으로 풀 것이므로 무조건 더 먼저 (A의 종료조건 && B의 종료조건) 에 충족하는 것이 답이된다.
끝까지 안나오면 WHILE문을 빠져 나올것이고 -1을 출력한다.
이 블로그 검색
피드 구독하기:
댓글 (Atom)
-
[ 백준 2528 : 사다리 ] 시뮬레이션문제 시뮬레이션이나 구현 문제의 차이점을 잘 모르겠다. 나는 시간이나 상황에따라 계속 변하는 것을 구현 하는것은 시뮬레이션이라 하고 딱 멈춰진 시간, 상황에 맞는 답을 구하는 것은 구현이라고 생각하...
-
[ 백준 1389 : 케빈 베이컨의 6단계 법칙 ] 한 지점을 기준으로 목표점에 얼마나 많은 간선을 지날 수 있는지를 묻는다. 그리고 그 수의 합이 가장 작은 기준 지점이 어떤 점인지를 묻는 문제이다. N이 100이다. 1을 기준으로 하고 ...
-
[ 백준 1806 : 부분합 ] 간만에 손도 풀고 감도 익힐겸 사이트에 들어갔는데 그냥 먼저 보이는 문제 하나 집어서 풀었다. 이 문제를 처음 읽고 메모이제이션해놓으면 편할것 같은데.. 생각하고 일단 바로 메모를 해놨다. DP라는 배열에 현재까...
[백준 16236] 아기 상어
[ 백준 16236 : 아기 상어 ] 2018 삼성전자 sw직무 하반기 기출문제입니다. 역대 삼성전자 기출문제가 그렇듯 역시나 BFS,DFS,완탐,DP,단순구현 입니다. 저는 문제를 단순히 BFS로 풀어갔습니다. 조건만 잘 지킨다면 한번에 ...
댓글 없음:
댓글 쓰기