본문 바로가기

BFS6

백준 - 숨바꼭질 4 - 13913 - swift https://www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제는 너비 우선 탐색 - bfs 유형이다. X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 총 3가지의 움직임이 있는데, 3가지 모두 다 1초 후에 발생한다. 문제는 가장 빠르게 동생을 찾을 수 있는 시간을 묻고 있다. 모두 1초이므로, 간단하게 bfs를 통해서 풀 수 있다. .. 2021. 8. 26.
백준 - 늑대와 양 - 16956 - swift https://www.acmicpc.net/problem/16956 16956번: 늑대와 양 크기가 R×C인 목장이 있고, 목장은 1×1 크기의 칸으로 나누어져 있다. 각각의 칸에는 비어있거나, 양 또는 늑대가 있다. 양은 이동하지 않고 위치를 지키고 있고, 늑대는 인접한 칸을 자유롭게 www.acmicpc.net 실버 4의 낮은 난이도지만, 재밌는 문제였다. 문제 유형은 구현에 가깝다. 또는 bfs로도 풀 수 있긴 하다. 즉 bfs를 몰라도 풀 수 있는 문제다. 사실 나도 문제를 보자마자 bfs가 딱 떠올랐다. 대체로 bfs나 dfs가 들어가면 최소 실버1~2의 난이도를 갖는데, 의아했다. 왜 실버 4일까? 처음에는 늑대를 기준으로 bfs를 돌리면서 양을 만나는...이런 생각을 하다가, 양을 기준으로 .. 2021. 8. 25.
백준 - 두 로봇 - 15971 - swift https://www.acmicpc.net/problem/15971 15971번: 두 로봇 입력에서 두 번째 줄에 주어지는 방번호는 1과 2, 세 번째 줄에 주어지는 방 번호는 2와 3, …, i번째 줄에 주어지는 방 번호는 i-1과 i, …, N번째 줄에 주어지는 방 번호는 N-1과 N이다 (아래 입력과 www.acmicpc.net bfs 또는 dfs , 그래프탐색 유형이다. 굉장히 좋은 문제라고 생각한다. 그래프탐색의 골드5의 난이도는 그렇게 어렵지 않지만, 핵심을 파악하는게 꽤 걸렸다. ( 사실 그마저도 다른 분의 코드를 참고해서 깨달았다. ) 이 동굴에는 총 N개의 넓은 방이 존재하며 좁은 통로로 서로 연결되어 있는 것으로 밝혀졌다. N개의 방은 1번부터 N번까지의 번호를 붙여 1번 방, 2번 방.. 2021. 8. 25.
백준 - 회의준비 - 2610 - swift https://www.acmicpc.net/problem/2610 2610번: 회의준비 첫째 중에 회의에 참석하는 사람의 수 N이 주어진다. 참석자들은 1부터 N까지의 자연수로 표현되며 회의에 참석하는 인원은 100 이하이다. 둘째 줄에는 서로 알고 있는 관계의 수 M이 주어진다. 이 www.acmicpc.net 유형은 bfs탐색 또는 플로이드 워셜로 볼 수 있다. 문제를 푸는 데 있어서 핵심 로직은 다음과 같다. 1. 서로 알고 있는 사람은 반드시 같은 위원회에 속해야 한다. 2. 효율적인 회의 진행을 위해 위원회의 수는 최대가 되어야 한다. 사실 1번을 만족한다면 2번은 자동적으로 만족할 수밖에 없다. 즉 2번은 그다지 고려하지 않아도 되는 부분이다. 그러므로, 위원회를 만들어주기 위한 그룹핑이 필요.. 2021. 8. 24.
백준 - 구슬 탈출 1, 2, 4, 13459, 13460, 15653 - swift https://www.acmicpc.net/problem/13459 13459번: 구슬 탈출 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 조금 난이도 있는 구현, bfs 문제라고 생각한다. 구현에 있어서 고려할 요소가 몇 개 있다. 기울이는 동작을 그만하는 것은 더 이상 구슬이 움직이지 않을 때까지이다. 즉, 좌, 우, 위, 아래 움직일 때 한 칸만 움직이는 것이 아닌 끝까지 움직이도록 해야 한다. 그리고 더 이상 움직이지 않을 때는, 벽에 부딪히거나, 또는 다른 구슬에 부딪힌 경우다... 2021. 8. 23.
프로그래머스 - 위클리 챌린지 3주차 - 퍼즐 조각 채우기 - swift https://programmers.co.kr/learn/courses/30/lessons/84021 코딩테스트 연습 - 3주차 [[1,1,0,0,1,0],[0,0,1,0,1,0],[0,1,1,0,0,1],[1,1,0,1,1,1],[1,0,0,0,1,0],[0,1,1,1,0,0]] [[1,0,0,1,1,0],[1,0,1,0,1,0],[0,1,1,0,1,1],[0,0,1,0,0,0],[1,1,0,1,1,0],[0,1,0,0,0,0]] 14 [[0,0,0],[1,1,0],[1,1,1]] [[1,1,1],[1,0,0],[0,0,0]] 0 programmers.co.kr 구현문제에 완전탐색과도 같다. 여기서 핵심을 빠르게 짚어야하는데, 조각을 보드판에 채우기위해서는 꼭 맞아떨어져야 한다는 점이다. 즉, 하나의 .. 2021. 8. 17.