[백준 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)
-
[ 백준 2629 : 양팔저울 ] 처음에 문제를 보고 단순히 전체 계산하면 된다고 생각했다. 어짜피 나올 수 있는 수는 0부터 15000 사이였고 이 나올 수 있는 무게 중 구슬 무게가 있으면 Y 없으면 N 을 출력하도록했다. 나는 이런 ...
-
[ 백준 5549 : 행성 탐사 ] 백준에 기본 DP문제 중 [백준 11660 : 구간 합 구하기 5 ] 이 문제와 똑같은문제입니다. (A,B)~(C,D)의 직사각형안에 있는 J와 O와 I의 갯수를 뽑아야합니다. 한 좌표마다 그 전 ...
-
아마 나와 비슷한 나이대의 학생들은 대부분 대학에서 수업을 들으면서 꾸준하게 들었을 것 같다. 물론 내가 그래서 그렇다. 4차산업~ IT의 시대~ 빅데이터~ 데이터 마이닝~ 하지만 컴퓨터 관련 전공자가 아니고 더군다나 공학 계열 전공자가 아니라...
[백준 16236] 아기 상어
[ 백준 16236 : 아기 상어 ] 2018 삼성전자 sw직무 하반기 기출문제입니다. 역대 삼성전자 기출문제가 그렇듯 역시나 BFS,DFS,완탐,DP,단순구현 입니다. 저는 문제를 단순히 BFS로 풀어갔습니다. 조건만 잘 지킨다면 한번에 ...
댓글 없음:
댓글 쓰기