본문 바로가기

3

백준 1697 숨박꼭질 c++ 이번문제는 최단시간을 찾는것.수빈이가 움직일수있는건 현위치에서 1. 현위치 + 12. 현위치 - 13. 현위치 * 2 이걸 bfs로 풀면 아주 간단해진다. 먼저 위치의 범위를 초기화 해준다. 그 후 수빈이의 초기위치를 0으로 할당한다.(수빈이가 그 지점에 존재한게 0 초일때니까) 큐에 수빈이 초기 위치를 넣고 수빈이가 움직일수 있는 조건1~3 을 반복하면서 문제없으면 죄다 큐에 집어넣는다.수빈이 이덩위치가 동생위치 b이면 그때 그 지점에 할당된 숫자가 걸린 최단시간이다.먼저 수진이 무빙은 temp1~3으로 두고 한번 수진이가 도착한지점에 대해 3번 동작을 한다.for문을 돌며 0~100000 범위를 벗어나면 수빈이가 갈 수 없는곳이니 패스. (갔다는건 새로 큐에 넣겠다는것)그리고 새로 가는곳엔 현위치에서.. 2024. 10. 24.
백준 2178 미로 탐색 C++ bfs로 풀 수 있는 문제이다.제한시간도 1초. 먼저 변수를int board[][];int visit[][];이렇게 둘것이다.애초에 우리는 0이 아닌 1만 지나갈것이기에 board를 0 또는 1로 초기화해준다.그리고 visit은 우리가 보드의 1 지점을 지났을때 이를 체크하기 위한 변수다. (지났는데 지난줄 모르고 또 지나면 아니되오) 또 int dx[], dy[]를 초기화 해줄것이다.특정지점 (a,b) 좌표가 있다고 하자. bfs는 기본적으로 한 지점에서 그 주위를 한번 쓱 훑는다. 자 그러면 이번문제에서 (a,b)기준으로는 사방면이 존재한다. 그렇다면 (a-1, b), (a,b-1),(a+1,b)(a,b+1)이렇게 4가지가 존재하겠다.이 행, 열 방향의 변화량을 각각 dx, dy로 둘것. 그래서  이.. 2024. 10. 7.
1158 요세푸스 문제 c++ (1. 큐로 풀기) 제거되는 순서대로 하나씩 출력되게 해야한다. 여기서 관건은 1, 2, (3), 하고나서 4,5,(6) , 하고나서 7 다음에 1로 가야한다는 점이다. 즉 순환하는것인데 이를 어떻게 접근해야 할지 고민이 된다.​우선 n이 주어지면 출력되는 숫자는 무조건 n개여야한다 그렇다면 n번 반복할때마다 k-1번 건너뛰어 k번째의 것을 제거하는 역할이 있어야 한다.​우선 생각을 해봤을때 k번째의 것을 벡터에 차곡차곡 넣으면 될거같다!그렇다면 저렇게 순환하는 n개를 어떻게할까??? -> queue를 이용해보자.k번째가 되기전까지 queue의 front를 push한다음 queue의 front를 pop한다면???그리고 k번째때 queue의 front를 push하는과정없이 pop하고 이를 vector에 push_back한다면.. 2022. 12. 23.